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.
Les filtres s'exécutent dans l'ordre suivant:
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):
Extrait de MSDN
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: (.