2012-02-27 5 views
1

Можно ли создать фильтр действий или что-то, что работает до, сам метод действия запускается на контроллере?Выполнение кода до вызова метода контроллера?

Мне нужно это, чтобы проанализировать несколько значений в запросе до запуска действия.

ответ

8

Вы можете переопределить OnActionExecuting метод в классе контроллера

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
     base.OnActionExecuting(filterContext); 
//Your logic is here... 
} 
+0

http://stackoverflow.com/ Вопросы/1337907/how-to-wire-common-code-from-a-base-controller-in-asp-net-mvc –

+0

И что, если мне нужно сделать это для всех моих контроллеров сразу с одним фрагментом кода? –

+0

Создайте базовый класс для всех ваших контроллеров, как описано в комментарии Артема. –

0

Если и не хотите использовать базовый контроллер у также может добавить собственный HttpHandler и зарегистрировать его в web.config. В методе BeginProcessRequest u может анализировать значения.

4

Вы можете использовать атрибут:

public class MyFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     // Your logic here... 

     base.OnActionExecuting(filterContext); 
    } 
} 

И если вы хотите, чтобы применить его ко всем контроллерам, в вашем Global.asax.cs:

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new MyFilterAttribute()); 
} 

protected void Application_Start() 
{ 
    // Other code removed for clarity of this example... 

    RegisterGlobalFilters(GlobalFilters.Filters); 
    RegisterRoutes(RouteTable.Routes); 

    // Other code removed for clarity of this example... 
} 
Смежные вопросы