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

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



답변

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

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


답변

당신은 사용할 수 ActionDescriptorActionExecutingContext

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


답변

다음을 볼 수 있습니다 RouteData.

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


답변

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

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


답변

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

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


답변

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

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


답변

속성 (예 :)을 사용 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)