Partager via


Présentation des filtres d’actions (VB)

par Microsoft

Télécharger le PDF

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

Heure mise en cache

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 :

  1. Filtres d’autorisation : implémente l’attribut IAuthorizationFilter .
  2. Filtres d’action : implémente l’attribut IActionFilter .
  3. Filtres de résultats : implémente l’attribut IResultFilter .
  4. 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).

Écriture dans la fenêtre Sortie de Visual Studio

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.