Présentation des filtres d’actions (VB)
par Microsoft
L’objectif de ce tutoriel est d’expliquer les filtres d’action. Un filtre d’action est un attribut que vous pouvez appliquer à une action de contrôleur ou à un contrôleur entier qui modifie la façon dont l’action est exécutée.
Présentation des filtres d’action
L’objectif de ce tutoriel est d’expliquer les filtres d’action. Un filtre d’action est un attribut que vous pouvez appliquer à une action de contrôleur ou à un contrôleur entier qui modifie la façon dont l’action est exécutée. L’infrastructure MVC ASP.NET comprend plusieurs filtres d’action :
- OutputCache : ce filtre d’action met en cache la sortie d’une action de contrôleur pendant une durée spécifiée.
- HandleError : ce filtre d’action gère les erreurs générées lors de l’exécution d’une action de contrôleur.
- Autoriser : ce filtre d’action vous permet de restreindre l’accès à un utilisateur ou à un rôle particulier.
Vous pouvez également créer vos propres filtres d’action personnalisés. Par exemple, vous pouvez créer un filtre d’action personnalisé afin d’implémenter un système d’authentification personnalisé. Vous pouvez également créer un filtre d’action qui modifie les données d’affichage retournées par une action de contrôleur.
Dans ce tutoriel, vous allez apprendre à créer un filtre d’action à partir de la base. Nous créons un filtre d’action de journalisation qui consigne les différentes étapes du traitement d’une action dans la fenêtre Sortie de Visual Studio.
Utilisation d’un filtre d’action
Un filtre d’action est un attribut. Vous pouvez appliquer la plupart des filtres d’action à une action de contrôleur individuelle ou à un contrôleur entier.
Par exemple, le contrôleur de données de la liste 1 expose une action nommée Index()
qui retourne l’heure actuelle. Cette action est décorée avec le filtre d’action OutputCache
. Ce filtre entraîne la mise en cache de la valeur retournée par l’action pendant 10 secondes.
Référencement 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
Si vous appelez à plusieurs reprises l’action Index()
en entrant l’URL /Data/Index dans la barre d’adresse de votre navigateur et en appuyant plusieurs fois sur le bouton Actualiser, la même heure s’affiche pendant 10 secondes. La sortie de l’action Index()
est mise en cache pendant 10 secondes (voir figure 1).
Figure 01 : Heure mise en cache (cliquer pour afficher l’image en taille réelle)
Dans La liste 1, un filtre d’action unique (le OutputCache
filtre d’action) est appliqué à la Index()
méthode. Si vous en avez besoin, vous pouvez appliquer plusieurs filtres d’action à la même action. Par exemple, vous pouvez appliquer les filtres d’action OutputCache
et HandleError
à la même action.
Dans La liste 1, le OutputCache
filtre d’action est appliqué à l’action Index()
. Vous pouvez également appliquer cet attribut à la DataController
classe elle-même. Dans ce cas, le résultat retourné par toute action exposée par le contrôleur est mis en cache pendant 10 secondes.
Les différents types de filtres
L’infrastructure MVC ASP.NET prend en charge quatre types de filtres différents :
- Filtres d’autorisation : implémente l’attribut
IAuthorizationFilter
. - Filtres d’action : implémente l’attribut
IActionFilter
. - Filtres de résultats : implémente l’attribut
IResultFilter
. - Filtres d’exception : implémente l’attribut
IExceptionFilter
.
Les filtres sont exécutés dans l’ordre indiqué ci-dessus. Par exemple, les filtres d’autorisation sont toujours exécutés avant les filtres d’action et les filtres d’exception sont toujours exécutés après chaque autre type de filtre.
Les filtres d’autorisation sont utilisés pour implémenter l’authentification et l’autorisation pour les actions du contrôleur. Par exemple, le filtre Autoriser est un exemple de filtre d’autorisation.
Les filtres d’action contiennent une logique qui est exécutée avant et après l’exécution d’une action de contrôleur. Vous pouvez utiliser un filtre d’action, pour instance, pour modifier les données d’affichage retournées par une action de contrôleur.
Les filtres de résultats contiennent une logique qui est exécutée avant et après l’exécution d’un résultat d’affichage. Par exemple, vous pouvez modifier un résultat d’affichage juste avant que la vue ne soit rendue dans le navigateur.
Les filtres d’exception sont le dernier type de filtre à exécuter. Vous pouvez utiliser un filtre d’exception pour gérer les erreurs générées par les actions de votre contrôleur ou les résultats de l’action du contrôleur. Vous pouvez également utiliser des filtres d’exception pour consigner les erreurs.
Chaque type de filtre différent est exécuté dans un ordre particulier. Si vous souhaitez contrôler l’ordre dans lequel les filtres du même type sont exécutés, vous pouvez définir la propriété Order d’un filtre.
La classe de base pour tous les filtres d’action est la System.Web.Mvc.FilterAttribute
classe . Si vous souhaitez implémenter un type particulier de filtre, vous devez créer une classe qui hérite de la classe Filter de base et implémente une ou plusieurs interfaces IAuthorizationFilter, IActionFilter, IResultFilter ou ExceptionFilter.
Classe ActionFilterAttribute de base
Pour faciliter l’implémentation d’un filtre d’action personnalisé, l’infrastructure MVC ASP.NET inclut une classe de base ActionFilterAttribute
. Cette classe implémente les IActionFilter
interfaces et et IResultFilter
hérite de la Filter
classe .
La terminologie en l’espèce n’est pas entièrement cohérente. Techniquement, une classe qui hérite de la classe ActionFilterAttribute est à la fois un filtre d’action et un filtre de résultat. Toutefois, au sens large, le mot filtre d’action est utilisé pour faire référence à n’importe quel type de filtre dans l’infrastructure MVC ASP.NET.
La classe ActionFilterAttribute de base possède les méthodes suivantes que vous pouvez remplacer :
- OnAction Execute : cette méthode est appelée avant l’exécution d’une action de contrôleur.
- OnActionExecuted : cette méthode est appelée après l’exécution d’une action de contrôleur.
- OnResult Execute : cette méthode est appelée avant l’exécution d’un résultat d’action de contrôleur.
- OnResultExecuted : cette méthode est appelée après l’exécution d’un résultat d’action de contrôleur.
Dans la section suivante, nous verrons comment implémenter chacune de ces différentes méthodes.
Création d’un filtre d’action de journal
Pour illustrer la façon dont vous pouvez créer un filtre d’action personnalisé, nous allons créer un filtre d’action personnalisé qui consigne les étapes du traitement d’une action de contrôleur dans la fenêtre Sortie de Visual Studio. Notre LogActionFilter
figure dans la liste 2.
Référencement 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
Dans La liste 2, les OnActionExecuting()
méthodes , OnActionExecuted()
, OnResultExecuting()
et OnResultExecuted()
appellent toutes la Log()
méthode . Le nom de la méthode et les données d’itinéraire actuelles sont passés à la Log()
méthode. La Log()
méthode écrit un message dans la fenêtre Sortie de Visual Studio (voir figure 2).
Figure 02 : Écriture dans la fenêtre Sortie de Visual Studio (cliquer pour afficher l’image en taille réelle)
Le contrôleur d’accueil de la liste 3 illustre la façon dont vous pouvez appliquer le filtre d’action Log à une classe de contrôleur entière. Chaque fois qu’une des actions exposées par le contrôleur d’accueil est appelée ( la Index()
méthode ou la About()
méthode ), les étapes de traitement de l’action sont enregistrées dans la fenêtre Sortie de Visual Studio.
Référencement 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
Résumé
Dans ce didacticiel, vous avez découvert ASP.NET filtres d’action MVC. Vous avez découvert les quatre différents types de filtres : les filtres d’autorisation, les filtres d’action, les filtres de résultats et les filtres d’exception. Vous avez également découvert la classe de base ActionFilterAttribute
.
Enfin, vous avez appris à implémenter un filtre d’action simple. Nous avons créé un filtre d’action Journal qui consigne les étapes du traitement d’une action de contrôleur dans la fenêtre Sortie de Visual Studio.