Wie erhalte ich den Controller- und Aktionsnamen in OnActionExecuting?

80

Ist es möglich, den aktuell ausgeführten Controller / die aktuell ausgeführte Aktion in OnActionExecuting herauszufinden?

loyalflow
quelle
9
Wenn eine dieser Antworten Ihr Problem gelöst hat, sollten Sie in Betracht ziehen, eine als akzeptiert zu betrachten.
PickYourPoison
2
@loyalflow lass mich hier Navi sein, indem ich sage "Hey! Hör zu!
Markiere

Antworten:

107

Sie könnten die versuchen , ActionDescriptorvon dem ActionExecutingContextwie folgt:

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

Sie können ActionDescriptorvon verwendenActionExecutingContext

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    var descriptor = filterContext.ActionDescriptor;
    var actionName = descriptor.ActionName;
    var controllerName = descriptor.ControllerDescriptor.ControllerName;
    ......
    base.OnActionExecuting(filterContext);
}
Satpal
quelle
Mein schlechtes, dieses ist nicht für Net-Core.
Derrick
21

Sie könnten sich Folgendes ansehen RouteData:

    Request.RequestContext.RouteData.Values["Controller"];
    Request.RequestContext.RouteData.Values["Action"];
Oliver
quelle
12

ActionExecutingContext-Kontext Dies wird Ihr Kontext sein ....

var actionName = ((Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor)context.ActionDescriptor).ActionName;
var controllerName = ((Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor)context.ActionDescriptor).ControllerName;
Sowmiyaa Sivakumar
quelle
1
Diese Antwort ist für .Net-Core
Derrick
9

Verwenden Sie für ASP.NET Core Folgendes:

var controllerName = ((ControllerBase)filterContext.Controller)
   .ControllerContext.ActionDescriptor.ControllerName;
var actionName = ((ControllerBase)filterContext.Controller)
   .ControllerContext.ActionDescriptor.ActionName;
Leistungsschalter
quelle
Diese Antwort ist für .Net-Core
Derrick
1
var controllerName = (string)routingValues["controller"];

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