2016-03-01 8 views
0

Я пишу собственный атрибут фильтра, унаследованный от ActionFilterAttribute класс в ASP.Net MVC. Я хочу, чтобы получить имя действия от URL, я попыталсяПолучить имя действия из URL внутри ActionFilterAttribute

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

, но нет ни одного пункта в controllerContext.RouteData.Values, следовательно, дает мне нулевую эталонную ошибку. Есть ли другой способ получить то же самое?

+2

Вы создаете ** новый контекст контроллера **. Используйте 'string actionName = (string) filterContext.RouteData.Values ​​[" action "];' в методе 'OnActionExecuting' –

ответ

2

Попробуйте следующее

public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 

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

    } 
+0

Хотя у меня был ответ перед вами, но ваш ответ выглядит лучше, чище, проще и один лайнер :) – Imad

+0

привет, если возможно, вы можете ответить на вопрос, с которым я столкнулся в asp mvc cache, [здесь] (http://stackoverflow.com/questions/35704618/asp-mvc-caching-static-contents-gives-500-internal-server -error) - вопрос. Любая помощь будет большой. – stom

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

работал для меня.