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

Asp.net 如何在OnActionExecuting中获取控制器和操作名称?,asp.net,asp.net-mvc-4,Asp.net,Asp.net Mvc 4,是否可以在OnActionExecuting中找出当前正在执行的控制器/操作?您可以使用 您可以尝试的,如下所示: protected override void OnActionExecuting(ActionExecutingContext filterContext) { string actionName = filterContext.ActionDescriptor.ActionName; string controllerName = filterContext.Act

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

您可以使用


您可以尝试,如下所示:

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

您可以查看
路由数据

    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;

我猜您使用了属性(例如
actionfilteratAttribute
),如果是这样,您可以

  • 操作名称表单属性构造函数:

        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)


  • 如果这些答案中的任何一个都解决了你的问题,你应该考虑把它当作一个被接受的。@ RealAlFLASH让我成为Navi,在这里说:“嘿!听着!请给我一个答案”这个答案是。
        public CustomProfileAttribute([CallerMemberName]  string caller = null)
        {
            _controllerName = context.Controller.ToString()
    
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            var controllerAndAction = context.ActionDescriptor.DisplayName;