2016-03-01 1 views
0

J'écris un attribut de filtre personnalisé hérité de la classe ActionFilterAttribute dans ASP.Net MVC. Je veux obtenir le nom de l'action de l'URL, j'ai essayéObtenir le nom de l'action à partir de l'URL à l'intérieur de ActionFilterAttribute

ControllerContext controllerContext = new ControllerContext(); 
controllerContext.RouteData.Values["action"].ToString(); 

mais il n'y a aucun élément dans controllerContext.RouteData.Values, donc me donner l'erreur de référence nulle. Y a-t-il un autre moyen d'obtenir la même chose?

+2

Vous créez un ** nouveau ** contexte de contrôleur. Utilisez 'string actionName = (string) filterContext.RouteData.Values ​​[" action "];' dans la méthode 'OnActionExecuting' –

Répondre

2

Effectuez les opérations suivantes

public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 

     string action = filterContext.ActionDescriptor.ActionName; 
     string controller = filterContext.Controller.GetType().Name; 

    } 
+0

Bien que j'aie eu une réponse avant de poster, mais votre réponse est meilleure, plus propre et plus simple :) – Imad

+0

Salut, si possible, pouvez-vous répondre à la question que je suis confronté dans asp mvc cache, [ici] (http://stackoverflow.com/questions/35704618/asp-mvc-caching-static-contents-gives-500-internal-server -erreur) est la question. Toute aide est la bienvenue. – stom

0
var rd = System.Web.HttpContext.Current.Request.RequestContext.RouteData; 
string actionName = rd.GetRequiredString("action"); 

a fonctionné pour moi.