Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
da Microsoft
L'obiettivo di questa esercitazione è spiegare i filtri di azione. Un filtro azione è un attributo che è possibile applicare a un'azione del controller , o a un intero controller, che modifica il modo in cui viene eseguita l'azione.
Informazioni sui filtri azione
L'obiettivo di questa esercitazione è spiegare i filtri di azione. Un filtro azione è un attributo che è possibile applicare a un'azione del controller , o a un intero controller, che modifica il modo in cui viene eseguita l'azione. Il framework ASP.NET MVC include diversi filtri di azione:
- OutputCache: questo filtro azione memorizza nella cache l'output di un'azione del controller per un intervallo di tempo specificato.
- HandleError: questo filtro azione gestisce gli errori generati quando viene eseguita un'azione del controller.
- Autorizza: questo filtro azione consente di limitare l'accesso a un determinato utente o ruolo.
È anche possibile creare filtri di azione personalizzati. Ad esempio, è possibile creare un filtro di azione personalizzato per implementare un sistema di autenticazione personalizzato. In alternativa, è possibile creare un filtro azione che modifica i dati di visualizzazione restituiti da un'azione del controller.
In questa esercitazione si apprenderà come creare un filtro di azione dal suolo. Viene creato un filtro azione log che registra diverse fasi dell'elaborazione di un'azione nella finestra Output di Visual Studio.
Uso di un filtro azione
Un filtro di azione è un attributo. È possibile applicare la maggior parte dei filtri di azione a un'unica azione controller o a un intero controller.
Ad esempio, il titolare del trattamento dei dati nell'elenco 1 espone un'azione denominata Index()
che restituisce l'ora corrente. Questa azione viene decorata con il OutputCache
filtro azione. Questo filtro causa la memorizzazione nella cache del valore restituito dall'azione per 10 secondi.
Elenco 1 – Controllers\DataController.vb
Public Class DataController
Inherits System.Web.Mvc.Controller
<OutputCache(Duration:=10)> _
Function Index()
Return DateTime.Now.ToString("T")
End Function
End Class
Se si richiama ripetutamente l'azione Index()
immettendo l'URL /Data/Index nella barra degli indirizzi del browser e premendo più volte il pulsante Aggiorna, verrà visualizzato lo stesso tempo per 10 secondi. L'output dell'azione Index()
viene memorizzato nella cache per 10 secondi (vedere la figura 1).
Figura 01: tempo memorizzato nella cache (fare clic per visualizzare l'immagine a dimensioni complete)
Nell'elenco 1 viene applicato un singolo filtro azione, il OutputCache
filtro azione, al Index()
metodo . Se è necessario, è possibile applicare più filtri di azione alla stessa azione. Ad esempio, è possibile applicare sia i filtri di OutputCache
azione che HandleError
i filtri delle azioni alla stessa azione.
In Elenco 1, il OutputCache
filtro azione viene applicato all'azione Index()
. È anche possibile applicare questo attributo alla DataController
classe stessa. In tal caso, il risultato restituito da qualsiasi azione esposta dal controller verrà memorizzato nella cache per 10 secondi.
Tipi diversi di filtri
Il framework ASP.NET MVC supporta quattro diversi tipi di filtri:
- Filtri di autorizzazione: implementa l'attributo
IAuthorizationFilter
. - Filtri azione: implementa l'attributo
IActionFilter
. - Filtri dei risultati: implementa l'attributo
IResultFilter
. - Filtri di eccezione: implementa l'attributo
IExceptionFilter
.
I filtri vengono eseguiti nell'ordine precedente. Ad esempio, i filtri di autorizzazione vengono sempre eseguiti prima che i filtri di azione e i filtri di eccezione vengano sempre eseguiti dopo ogni altro tipo di filtro.
I filtri di autorizzazione vengono usati per implementare l'autenticazione e l'autorizzazione per le azioni del controller. Ad esempio, il filtro Autorizza è un esempio di filtro Di autorizzazione.
I filtri di azione contengono la logica eseguita prima e dopo l'esecuzione di un'azione del controller. È possibile usare un filtro azione, ad esempio, per modificare i dati di visualizzazione restituiti da un'azione del controller.
I filtri dei risultati contengono la logica eseguita prima e dopo l'esecuzione di un risultato della visualizzazione. Ad esempio, è possibile modificare un risultato di visualizzazione direttamente prima del rendering della visualizzazione nel browser.
I filtri di eccezione sono l'ultimo tipo di filtro da eseguire. È possibile usare un filtro di eccezione per gestire gli errori generati dalle azioni del controller o dai risultati dell'azione del controller. È anche possibile usare filtri di eccezione per registrare gli errori.
Ogni tipo di filtro diverso viene eseguito in un ordine specifico. Se si vuole controllare l'ordine in cui vengono eseguiti filtri dello stesso tipo, è possibile impostare la proprietà Order di un filtro.
La classe di base per tutti i filtri azione è la System.Web.Mvc.FilterAttribute
classe . Se si vuole implementare un particolare tipo di filtro, è necessario creare una classe che eredita dalla classe Filtro di base e implementa una o più interfacce IAuthorizationFilter, IActionFilter, IResultFilter o ExceptionFilter.
Classe Base ActionFilterAttribute
Per semplificare l'implementazione di un filtro di azione personalizzato, il framework ASP.NET MVC include una classe di base ActionFilterAttribute
. Questa classe implementa sia le IActionFilter
interfacce che IResultFilter
eredita dalla Filter
classe .
La terminologia qui non è completamente coerente. Tecnicamente, una classe che eredita dalla classe ActionFilterAttribute è sia un filtro di azione che un filtro di risultato. Tuttavia, nel senso libero, il filtro delle azioni di parola viene usato per fare riferimento a qualsiasi tipo di filtro nel framework ASP.NET MVC.
La classe Base ActionFilterAttribute include i metodi seguenti che è possibile eseguire l'override:
- OnActionExecuting: questo metodo viene chiamato prima dell'esecuzione di un'azione del controller.
- OnActionExecuted: questo metodo viene chiamato dopo l'esecuzione di un'azione del controller.
- OnResultExecuting: questo metodo viene chiamato prima dell'esecuzione di un risultato dell'azione del controller.
- OnResultExecuted: questo metodo viene chiamato dopo l'esecuzione di un risultato dell'azione del controller.
Nella sezione successiva verrà illustrato come implementare ognuno di questi diversi metodi.
Creazione di un filtro azione log
Per illustrare come creare un filtro azione personalizzato, verrà creato un filtro di azione personalizzato che registra le fasi dell'elaborazione di un'azione controller nella finestra Output di Visual Studio. Il nostro LogActionFilter
è contenuto nell'elenco 2.
Presentazione 2 – ActionFilters\LogActionFilter.vb
Public Class LogActionFilter
Inherits ActionFilterAttribute
Public Overrides Sub OnActionExecuting(ByVal filterContext As ActionExecutingContext)
Log("OnActionExecuting", filterContext.RouteData)
End Sub
Public Overrides Sub OnActionExecuted(ByVal filterContext As ActionExecutedContext)
Log("OnActionExecuted", filterContext.RouteData)
End Sub
Public Overrides Sub OnResultExecuting(ByVal filterContext As ResultExecutingContext)
Log("OnResultExecuting", filterContext.RouteData)
End Sub
Public Overrides Sub OnResultExecuted(ByVal filterContext As ResultExecutedContext)
Log("OnResultExecuted", filterContext.RouteData)
End Sub
Private Sub Log(ByVal methodName As String, ByVal routeData As RouteData)
Dim controllerName = routeData.Values("controller")
Dim actionName = routeData.Values("action")
Dim message = String.Format("{0} controller:{1} action:{2}", methodName, controllerName, actionName)
Debug.WriteLine(message, "Action Filter Log")
End Sub
End Class
In Elenco 2, i OnActionExecuting()
metodi , OnActionExecuted()
OnResultExecuting()
, e OnResultExecuted()
chiamano tutto il Log()
metodo. Il nome del metodo e i dati di route correnti vengono passati al Log()
metodo. Il Log()
metodo scrive un messaggio nella finestra Output di Visual Studio (vedere la figura 2).
Figura 02: Scrittura nella finestra Output di Visual Studio (Fare clic per visualizzare l'immagine a dimensioni complete)
Il controller Home nell'elenco 3 illustra come applicare il filtro azione Log a un'intera classe controller. Ogni volta che viene richiamata una delle azioni esposte dal controller Home, ovvero il metodo o il Index()
About()
metodo , le fasi dell'elaborazione dell'azione vengono registrate nella finestra Output di Visual Studio.
Elenco 3 – Controllers\HomeController.vb
<LogActionFilter()> _
Public Class HomeController
Inherits System.Web.Mvc.Controller
Function Index()
Return View()
End Function
Function About()
Return View()
End Function
End Class
Riepilogo
In questa esercitazione è stato introdotto ASP.NET filtri di azione MVC. Sono stati illustrati i quattro diversi tipi di filtri: filtri di autorizzazione, filtri di azione, filtri dei risultati e filtri di eccezione. È stata anche appresa la classe di base ActionFilterAttribute
.
Infine, si è appreso come implementare un semplice filtro di azione. È stato creato un filtro azione log che registra le fasi dell'elaborazione di un'azione del controller nella finestra Output di Visual Studio.