web-dev-qa-db-fra.com

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

Dans MVC, nous pouvons décorer des méthodes d'action avec différents filtres comme

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

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

Ma question est: dans quel ordre sont-ils exécutés dans le pipeline de demande MVC? J'ai essayé d'aller chercher dans le code source MVC mais je n'ai pas trouvé les bits de code pertinents.

52

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 s'exécutent en dernier. Dans chaque type de filtre, la valeur Order spécifie l'ordre d'exécution. Dans chaque type et ordre de filtre, la valeur d'énumération d'étendue spécifie l'ordre des filtres. Cette énumération définit les valeurs de portée de filtre suivantes (dans l'ordre dans lequel elles s'exécutent):

  1. Premier
  2. Global
  3. Manette
  4. Action
  5. Dernier

Extrait de MSDN

74
Eranga

Pour vous faire gagner du temps, voici comment vous réglez la commande:

[MyCustomContextFilter(Order=1)]

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

Il convient de noter que le fait qu'un filtre se trouve sur la classe de base ne dit pas à MVC de l'appliquer en premier: (.

22
ProVega