如何在OnActionExecuting中获取控制器和操作名称?

loy*_*low 67 asp.net asp.net-mvc-4

是否可以找出OnActionExecuting中当前正在执行的控制器/操作?

chr*_*dam 96

你可以尝试ActionDescriptorActionExecutingContext,如下所示:

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


Sat*_*pal 36

您可以使用ActionDescriptorActionExecutingContext

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


Oli*_*ver 14

你可以看一下RouteData:

    Request.RequestContext.RouteData.Values["Controller"];
    Request.RequestContext.RouteData.Values["Action"];
Run Code Online (Sandbox Code Playgroud)


小智 6

ActionExecutingContext上下文将成为您的上下文。

var actionName = ((Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor)context.ActionDescriptor).ActionName;
var controllerName = ((Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor)context.ActionDescriptor).ControllerName;
Run Code Online (Sandbox Code Playgroud)

  • 这个答案适用于.Net-Core (2认同)

Cir*_*ker 5

对于ASP.NET Core,请使用以下命令,

var controllerName = ((ControllerBase)filterContext.Controller)
   .ControllerContext.ActionDescriptor.ControllerName;
var actionName = ((ControllerBase)filterContext.Controller)
   .ControllerContext.ActionDescriptor.ActionName;
Run Code Online (Sandbox Code Playgroud)