2012-03-22 11 views
10

Come possiamo eseguire un metodo prima di eseguire ogni azione in MVC3?
Eseguire un metodo prima di ogni azione in MVC3

So che possiamo utilizzare il seguente metodo per OnActionExecuting:

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

Ma come possiamo eseguire un metodo prima ActionExecuting?

risposta

13

Stai cercando Controller.ExecuteCore().

Questa funzione viene chiamata prima di ogni azione. È possibile sovrascriverlo in un controller o in un controller di base. Esempio che imposta cultura di base sui cookie da 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 se ne avete bisogno ovunque. vale a dire: caricamento file –

3

Inoltre si potrebbe considerare utilizzare Application_BeginRequest metodo global.asax

+0

Questo è l'approccio che ho usato e ha funzionato alla grande. – asawyer

+0

Ho bisogno di usare 'Request.Cookies' e' Session' nel metodo. ma non possiamo accedervi in ​​'Application_BeginRequest' –

Problemi correlati