2009-03-16 10 views

risposta

9

Sì, è possibile farlo ma non è il modo in cui funziona fuori dalla scatola. Ho fatto la seguente:

  1. Creare una classe controller di base e avere tutti i controller di ereditare da essa
  2. Crea un attributo di filtro azione e lo hanno ereditare da FilterAttribute e IActionFilter
  3. Arreda la tua classe di controller di base con il nuovo attributo di filtro azione

Ecco un esempio di attributo di filtro azione:

public class SetCultureAttribute : FilterAttribute, IActionFilter 
{ 
    #region IActionFilter implementation 

    public void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     //logic goes here 
    } 

    public void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     //or logic goes here 
    } 

    #endregion IActionFilter implementation 
} 

Ecco un esempio della classe base del controllore con questo attributo:

[SetCulture] 
public class ControllerBase : Controller 
{ 
    ... 
} 

Utilizzando questo metodo finché le vostre classi controller eredita dalla ControllerBase poi il filtro azione setCulture sarebbe sempre essere eseguito. Ho un campione completo e post su questo on my blog se desideri maggiori dettagli.

Spero che questo aiuti!

+0

Questo influisce solo ActionResults? Oppure influenza anche altri tipi di risultati? JsonResult, FileResult, ecc.? –

0

Non è necessario applicarlo a ogni azione, è sufficiente applicarlo a ogni controller (ad esempio, inserire l'attributo nella classe, non nel metodo).

Oppure, come detto da Ian, è possibile inserirlo in una classe di controller di base e quindi estenderlo da quel controller.

4

Come le cose si fanno meglio ... 2 anni dopo abbiamo

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new HandleErrorElmahAttribute()); 
    } 
+0

basallo - da dove lo chiameresti? o metterlo? –

+0

Nel global.asax. –

Problemi correlati