Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

ASP.NET MVC C#에서 NonAction 특성(Attribute)이 중요한 이유

NonAction 특성(Attribute)은 컨트롤러 안에 public 메서드로 유지하고 싶지만, 이를 액션 메서드로 취급하고 싶지 않을 때 사용합니다. 액션 메서드란 URL을 통해 호출할 수 있는 컨트롤러의 public 메서드를 의미합니다.

기본적으로 컨트롤러에 정의된 모든 public 메서드는 URL 요청만으로 호출될 수 있습니다. 따라서 외부에 노출되어서는 안 되는 public 메서드가 있다면 NonAction 특성을 적용하여 접근을 제한해야 합니다.

예제: 두 개의 public 메서드를 가진 HomeController

다음과 같이 MyMethod1MyMethod2라는 두 개의 public 메서드를 가진 HomeController가 있다고 가정해 보겠습니다.

using System.Web.Mvc;
namespace DemoMvcApplication.Controllers{
    public class HomeController : Controller{
        public string MyMethod1(){
            return "<h1>My Method 1 Invoked</h1>";
        }
        public string MyMethod2(){
            return "<h1>My Method 2 Invoked</h1>";
        }
    }
}

아래 URL을 통해 HomeController의 두 메서드를 각각 호출할 수 있습니다.

https://localhost:59146/Home/MyMethod1

https://localhost:59146/Home/MyMethod2

ASP.NET MVC C#에서 NonAction 특성(Attribute)이 중요한 이유

ASP.NET MVC C#에서 NonAction 특성(Attribute)이 중요한 이유

이제 MyMethod2가 내부적인 용도로만 사용되며, URL 요청을 통한 호출은 원하지 않는 상황이라고 가정해 봅시다. 이 경우 해당 메서드에 [NonAction] 특성을 선언하기만 하면 됩니다.

NonAction 특성 적용하기

using System.Web.Mvc;
namespace DemoMvcApplication.Controllers{
    public class HomeController : Controller{
        public string MyMethod1(){
            return "<h1>My Method 1 Invoked</h1>";
        }
        [NonAction]
        public string MyMethod2(){
            return "<h1>My Method 2 Invoked</h1>";
        }
    }
}

MyMethod2를 NonAction으로 지정한 후 다시 URL로 요청하면 아래와 같은 결과가 나타납니다.

실행 결과

ASP.NET MVC C#에서 NonAction 특성(Attribute)이 중요한 이유

참고 사항

ASP.NET MVC 프레임워크는 오직 public 메서드만 액션으로 간주하기 때문에, 메서드를 private 또는 protected로 선언하는 방법으로도 URL 호출을 막을 수 있습니다. 하지만 해당 메서드를 다른 클래스에서 호출해야 하는 등 public으로 유지해야 하는 상황이라면 NonAction 특성이 가장 깔끔한 해결책입니다.