OnActionExecuting에서 컨트롤러 및 작업 이름을 얻는 방법은 무엇입니까?


80

OnActionExecuting에서 현재 실행중인 컨트롤러 / 액션을 파악할 수 있습니까?


9
이러한 답변 중 하나라도 문제를 해결했다면 수락 된 것으로 만드는 것을 고려해야합니다.
PickYourPoison

2
@loyalflow는 "Hey! Listen! Mark an answer please"라고 말하여 Navi가 될 수있게 해줍니다.
Dbl

답변:


107

당신은 시도 할 수 ActionDescriptor의를 ActionExecutingContext다음과 같이 :

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
   string actionName = filterContext.ActionDescriptor.ActionName;
   string controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName
   .....
   base.OnActionExecuting(filterContext);
}

38

당신은 사용할 수 ActionDescriptorActionExecutingContext

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    var descriptor = filterContext.ActionDescriptor;
    var actionName = descriptor.ActionName;
    var controllerName = descriptor.ControllerDescriptor.ControllerName;
    ......
    base.OnActionExecuting(filterContext);
}

안타깝게도 이것은 넷 코어 용이 아닙니다.
Derrick

22

다음을 볼 수 있습니다 RouteData.

    Request.RequestContext.RouteData.Values["Controller"];
    Request.RequestContext.RouteData.Values["Action"];

12

ActionExecutingContext 컨텍스트 이것은 당신의 컨텍스트가 될 것입니다 ....

var actionName = ((Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor)context.ActionDescriptor).ActionName;
var controllerName = ((Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor)context.ActionDescriptor).ControllerName;

1
이 답변은 닷넷 코어입니다
데릭

9

ASP.NET Core의 경우 다음을 사용하십시오.

var controllerName = ((ControllerBase)filterContext.Controller)
   .ControllerContext.ActionDescriptor.ControllerName;
var actionName = ((ControllerBase)filterContext.Controller)
   .ControllerContext.ActionDescriptor.ActionName;

이 답변은 닷넷 코어입니다
데릭

1
var controllerName = (string)routingValues["controller"];

var actionName = (string)routingValues["action"];

0

속성 (예 :)을 사용 ActionFilterAttribute하는 것 같습니다. 그렇다면 다음을 얻을 수 있습니다.

  • 작업 이름 양식 속성 생성자 :

        public CustomProfileAttribute([CallerMemberName]  string caller = null)
        {
            _actionName = caller;
        }
    
  • 컨트롤러 이름 :

        public CustomProfileAttribute([CallerMemberName]  string caller = null)
        {
            _controllerName = context.Controller.ToString()
    
  • 또는 컨트롤러액션 모두 :

        public override void OnActionExecuting(ActionExecutingContext context)
        {
            var controllerAndAction = context.ActionDescriptor.DisplayName;
    

    하지만 그런 경우에 당신은 controller.action (action)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.