2013-10-08 9 views

risposta

9

Come da domanda, sì, possiamo implementare la stessa logica in entrambi IActionFilter e IAuthorizationFilter. ma l'unico ordine di esecuzione è diverso.

Il quadro ASP.NET MVC supporta quattro differenti tipi di filtri:

Authorization – Implements IAuthorizationFilter Attribute. 
    Action  – Implements IActionFilter Attribute. 
    Result  – Implements IResultFilter Attribute. 
    Exception  – Implements IExceptionFilter Attribute. 

Nota:filtri vengono eseguiti nell'ordine di cui sopra.

filtri di autorizzazione vengono sempre eseguite prima azione filtra e filtri eccezioni sono sempre eseguito dopo ogni altro tipo di filter.

Authorization i filtri vengono utilizzati per implementare authentication e authorization per le azioni del controllore. Ad esempio, il filtro Autorizza è un esempio di filtro di autorizzazione.

I filtri di azione contengono la logica che viene eseguita prima e dopo l'esecuzione di un'azione del controllore. È possibile utilizzare un filtro azione, ad esempio, per modificare i dati della vista restituiti da un'azione del controller.

Result i filtri contengono la logica che viene eseguita prima e dopo l'esecuzione di un risultato della vista. Ad esempio, potresti voler modificare un risultato di visualizzazione appena prima che la vista sia resa al browser.

Exception i filtri sono l'ultimo tipo di filtro da eseguire. È possibile utilizzare un filtro di eccezione per gestire gli errori generati dalle azioni del controller o dai risultati dell'azione del controller. È inoltre possibile utilizzare i filtri delle eccezioni per registrare gli errori.

Ogni diverso tipo di filtro viene eseguito in un ordine particolare. Se si desidera controllare l'ordine in cui vengono eseguiti i filtri dello stesso tipo, è possibile impostare la proprietà dell'ordine di un filtro.

Nota:La classe base per tutti i filtri azione è la classe System.Web.Mvc.FilterAttribute.

1

Sì, è possibile implementare un filtro di autenticazione con un filtro azione. Da here:

È possibile utilizzare i filtri di azione per la registrazione, l'autenticazione, la cache di output o altre attività.

temo non so il motivo per cui esiste una differenza diversa IAuthorizationFilter è un'interfaccia più semplice con il suo un metodo, ma ha anche un minor numero di proprietà sul suo contesto.

3

I filtri di autorizzazione vengono eseguiti molto presto nella pipeline di azioni. Ad esempio, sono buoni per sfuggire alla pipeline d'azione quando le condizioni non sono soddisfatte. Gli attributi del framework MVC di esempio che lo utilizzano sono [Autorizza], [RequireHttps])

I filtri di azione vengono eseguiti dopo i filtri di autorizzazione e possono partecipare alle operazioni di pre e post elaborazione delle azioni.