Condividi tramite


Informazioni sui filtri per azioni (VB)

da Microsoft

Scarica il PDF

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).

Tempo memorizzato nella cache

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:

  1. Filtri di autorizzazione: implementa l'attributo IAuthorizationFilter .
  2. Filtri azione: implementa l'attributo IActionFilter .
  3. Filtri dei risultati: implementa l'attributo IResultFilter .
  4. 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).

Scrittura nella finestra Output di Visual Studio

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.