Як отримати ім'я контролера та дії в OnActionExecuting?


80

Чи можна зрозуміти виконуваний в даний момент контролер / дію в OnActionExecuting?


9
Якщо будь-яка з цих відповідей вирішила вашу проблему, вам слід подумати зробити її прийнятою.
PickYourPoison

2
@loyalflow дозвольте мені бути Наві тут, сказавши: "Гей! Слухай! Познач відповідь, будь ласка"
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

Ви можете використовувати ActionDescriptorвActionExecutingContext

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

Шкода, цей не для мережевого ядра.
Деррік

21

Ви можете переглянути 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
Ця відповідь для .Net-Core
Деррік

9

Для ASP.NET Core використовуйте наступне,

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

Ця відповідь для .Net-Core
Деррік


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)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.