2012-03-22 4 views
10

Как запустить метод перед запуском каждого действия в MVC3?
Выполнить метод перед каждым действием в MVC3

Я знаю, что мы можем использовать следующий метод для OnActionExecuting:

public class ValidateUserSessionFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     ... 
    } 
} 

Но как мы можем запустить метод перед ActionExecuting?

ответ

13

Вы ищете Controller.ExecuteCore().

Эта функция вызывается перед каждым вызовом вызова. Вы можете переопределить его в контроллере или базовом контроллере. Пример, который устанавливает культуры базы на печенье из Nadeem Afana:

public class BaseController : Controller 
    { 
     protected override void ExecuteCore() 
     { 
     string cultureName = null; 
     // Attempt to read the culture cookie from Request 
     HttpCookie cultureCookie = Request.Cookies["_culture"]; 
     if (cultureCookie != null) 
     { 
      cultureName = cultureCookie.Value; 
     } 
     else 
     { 
      if (Request.UserLanguages != null) 
      { 
       cultureName = Request.UserLanguages[0]; // obtain it from HTTP header AcceptLanguages 
      } 
      else 
      { 
       cultureName = "en-US"; // Default value 
      } 
     } 

     // Validate culture name 
     cultureName = CultureHelper.GetImplementedCulture(cultureName); // This is safe 


     // Modify current thread's cultures    
     Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cultureName); 
     Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture; 

     base.ExecuteCore(); 
     } 
    } 
+2

Override BeginExecute, если вам это нужно везде. i.e: Загрузка файла –

3

Я также предложил бы посмотреть в АОП, Postsharp или Castle Windsor может легко справиться с такой задачей.

3

Кроме того, вы могли бы рассмотреть возможность использовать Application_BeginRequest метод в global.asax

+0

Это подход, который я использовал, и он отлично работал. – asawyer

+0

Мне нужно использовать 'Request.Cookies' и' Session' в методе. но мы не можем получить к ним доступ в 'Application_BeginRequest' –

Смежные вопросы