57 votes

Dans quel ordre les filtres sont-ils exécutés dans asp.net mvc ?

Dans MVC, nous pouvons décorer les méthodes d'action avec différents filtres tels que

[HttpPost]
[Authorize]
public ActionResult mymethod(){}

HttpPost découle de MethodSelectorAttribute (probablement indirectement) et le Authorize hérite de l'attribut ActionFilterAttribute .

Ma question est la suivante : dans quel ordre sont-elles exécutées dans le pipeline de requêtes MVC ? J'ai essayé de chercher dans le code source de MVC mais je n'ai pas réussi à trouver les éléments de code pertinents.

84voto

Eranga Points 21853

Les filtres s'exécutent dans l'ordre suivant :

  1. Filtres d'autorisation
  2. Filtres d'action
  3. Filtres de réponse
  4. Filtres d'exception

Par exemple, les filtres d'autorisation s'exécutent en premier et les filtres d'exception en dernier. Pour chaque type de filtre, la valeur Order spécifie l'ordre d'exécution. Pour chaque type de filtre et chaque ordre, la valeur de l'énumération Scope spécifie l'ordre des filtres. Cette énumération définit les valeurs suivantes de la portée des filtres (dans l'ordre dans lequel ils s'exécutent) :

  1. Première
  2. Mondial
  3. Contrôleur
  4. Action
  5. Dernière

Extrait de MSDN

25voto

ProVega Points 1425

Pour vous faire gagner du temps, voici comment définir l'ordre :

[MyCustomContextFilter(Order=1)]

L'index est basé sur 0, vous pouvez donc faire 0, 1, 2, etc...

Il faut noter que ce n'est pas parce qu'un filtre est sur la classe de base que MVC doit l'appliquer en premier :(.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X