Informazioni sui filtri per azioni (C#)
di Microsoft
L'obiettivo di questa esercitazione è illustrare i filtri azione. Un filtro azioni è 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 è illustrare i filtri azione. Un filtro azioni è 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 MVC ASP.NET include diversi filtri di azione:
- OutputCache: questo filtro azione memorizza nella cache l'output di un'azione del controller per un periodo di tempo specificato.
- HandleError: questo filtro azioni 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 azione personalizzati. Ad esempio, è possibile creare un filtro 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 azione da zero. Viene creato un filtro azione Log che registra fasi diverse 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 azione a una singola azione del 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 fa sì che il valore restituito dall'azione venga memorizzato nella cache per 10 secondi.
Elenco 1 : Controllers\DataController.cs
using System;
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
public class DataController : Controller
{
[OutputCache(Duration=10)]
public string Index()
{
return DateTime.Now.ToString("T");
}
}
}
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à visualizzata la stessa volta 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 dimensione intera)
Nell'elenco 1 viene applicato un singolo filtro azione, ovvero il OutputCache
filtro azione, al Index()
metodo . Se necessario, è possibile applicare più filtri azione alla stessa azione. Ad esempio, è possibile applicare entrambi i OutputCache
filtri di azione e HandleError
alla stessa azione.
Nell'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 verrebbe memorizzato nella cache per 10 secondi.
I diversi tipi 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 eccezioni: implementa l'attributo
IExceptionFilter
.
I filtri vengono eseguiti nell'ordine indicato in precedenza. Ad esempio, i filtri di autorizzazione vengono sempre eseguiti prima che i filtri azione e i filtri delle eccezioni 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 Authorize è un esempio di filtro Autorizzazione.
I filtri azione contengono la logica eseguita prima e dopo l'esecuzione di un'azione del controller. È possibile usare un filtro azioni, 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 immediatamente prima che venga eseguito il rendering della visualizzazione nel browser.
I filtri eccezioni sono l'ultimo tipo di filtro da eseguire. È possibile usare un filtro eccezioni 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 desidera controllare l'ordine in cui vengono eseguiti i filtri dello stesso tipo, è possibile impostare la proprietà Order di un filtro.
La classe 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 Filter di base e implementa una o più interfacce IAuthorizationFilter
, IActionFilter
, IResultFilter
o IExceptionFilter
.
Classe Base ActionFilterAttribute
Per semplificare l'implementazione di un filtro azione personalizzato, il framework MVC ASP.NET include una classe base ActionFilterAttribute
. Questa classe implementa sia le IActionFilter
interfacce e IResultFilter
che eredita dalla Filter
classe .
La terminologia qui non è completamente coerente. Tecnicamente, una classe che eredita dalla classe ActionFilterAttribute è sia un filtro azione che un filtro dei risultati. Tuttavia, in senso libero, il filtro di azione parola viene usato per fare riferimento a qualsiasi tipo di filtro nel framework MVC ASP.NET.
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 è possibile creare un filtro azione personalizzato, verrà creato un filtro azioni personalizzato che registra le fasi dell'elaborazione di un'azione del controller nella finestra Output di Visual Studio. Il nostro LogActionFilter
è contenuto nell'Elenco 2.
Elenco 2 : ActionFilters\LogActionFilter.cs
using System;
using System.Diagnostics;
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication1.ActionFilters
{
public class LogActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
Log("OnActionExecuting", filterContext.RouteData);
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
Log("OnActionExecuted", filterContext.RouteData);
}
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
Log("OnResultExecuting", filterContext.RouteData);
}
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
Log("OnResultExecuted", filterContext.RouteData);
}
private void Log(string methodName, RouteData routeData)
{
var controllerName = routeData.Values["controller"];
var actionName = routeData.Values["action"];
var message = String.Format("{0} controller:{1} action:{2}", methodName, controllerName, actionName);
Debug.WriteLine(message, "Action Filter Log");
}
}
}
Nell'elenco 2, i OnActionExecuting()
metodi , OnResultExecuting()
OnActionExecuted()
, e OnResultExecuted()
chiamano tutti 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 dimensione intera)
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 di elaborazione dell'azione vengono registrate nella finestra Output di Visual Studio.
Listato 3 : Controllers\HomeController.cs
using System.Web.Mvc;
using MvcApplication1.ActionFilters;
namespace MvcApplication1.Controllers
{
[LogActionFilter]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult About()
{
return View();
}
}
}
Riepilogo
In questa esercitazione sono stati introdotti ASP.NET filtri di azione MVC. Sono stati illustrati i quattro diversi tipi di filtri: filtri di autorizzazione, filtri azione, filtri dei risultati e filtri eccezioni. Sono state anche apprese informazioni sulla 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.