2009-09-16 9 views

risposta

4

No. Il modo più semplice per farlo è scrivere una classe base comune che tutti i tipi di controller sottoclassi, quindi inserire un filtro azione su quella classe base o sovrascrivere il suo metodo OnActionExecuting().

+0

... ovviamente, tutto dipende da che cosa è necessario fare. –

+2

Si noti che MVC 3 ha aggiunto il supporto per i filtri globali –

12

Asp.net MVC3 aggiunto il supporto per Global Filters

Dal blog ScottGu:

ASP.NET MVC supporta la possibilità di applicare in modo dichiarativo logica “trasversale” con un meccanismo chiamato “filtri”. È possibile specificare i filtri sui controller e metodi di azione oggi utilizzando una sintassi attributo in questo modo:

image

sviluppatori spesso desidera applicare una logica di filtro in tutti i controller all'interno di un'applicazione. ASP.NET MVC 3 ora consente di specificare che un filtro deve essere applicato globalmente a tutti i controller all'interno di un'applicazione. Ora puoi farlo aggiungendolo alla collezione GlobalFilters. Metodo RegisterGlobalFilters() è ora incluso nel modello predefinito di classe Global.asax per fornire un posto comodo per fare questo (è quindi chiamato dal metodo Application_Start()):

image

La logica risoluzione filtro MVC 3 è flessibile in modo da poter configurare un filtro globale che si applica solo in modo condizionato se vengono soddisfatte determinate condizioni (ad esempio: il debug è abilitato o se una richiesta utilizza un verbo http specifico, ecc.). Ora i filtri possono essere risolti anche da un contenitore DI (Dependency Injection).

2

Creare una classe che implementi IActionFilter e/o IResultFilter:

public class FilterAllActions : IActionFilter, IResultFilter 
{  
    public void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     throw new System.NotImplementedException(); 
    } 

    public void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     throw new System.NotImplementedException(); 
    } 

    public void OnResultExecuting(ResultExecutingContext filterContext) 
    { 
     throw new System.NotImplementedException(); 
    } 

    public void OnResultExecuted(ResultExecutedContext filterContext) 
    { 
     throw new System.NotImplementedException(); 
    } 
} 

e registrarlo su Global.asax

protected void Application_Start() 
    { 
     //... 
     RegisterGlobalFilters(GlobalFilters.Filters); 
     //... 
    } 

    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new FilterAllActions()); 
    } 
Problemi correlati