Запускайте метод перед каждым действием в MVC3 - PullRequest
10 голосов
/ 23 марта 2012

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

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

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

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

Ответы [ 3 ]

13 голосов
/ 23 марта 2012

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

Эта функция вызывается перед каждым действием. Вы можете переопределить его в контроллере или базовом контроллере. Пример, который устанавливает культурную базу для файлов cookie из 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();
      }
   }
3 голосов
/ 23 марта 2012

Также вы можете рассмотреть использование метода Application_BeginRequest в global.asax

3 голосов
/ 23 марта 2012

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

...