notez que cette réponse est vraie jusqu'à MVC 5 / Web API 2
Réponse courte: Les filtres MVC et Web API ne sont pas compatibles entre eux et si vous souhaitez les enregistrer globalement, vous devez utiliser les classes de configuration appropriées pour chacun.
Réponse longue: ASP.NET MVC et l'API Web sont délibérément conçus pour fonctionner de la même manière, mais ce sont en fait des créatures différentes.
L'API Web vit sous l' System.Web.Httpespace de noms, tandis que MVC vit sous l' System.Web.Mvcespace de noms. Les deux vivront heureusement côte à côte, mais l'un ne contient pas l'autre et malgré les similitudes dans le modèle de programmation, les implémentations sous-jacentes sont différentes. Tout comme les contrôleurs MVC et les contrôleurs d'API Web héritent de différentes classes de contrôleur de base (MVC est simplement nommé Controlleret l'API Web est nommé ApiController), les filtres MVC et les filtres d'API Web héritent de différentes FilterAttributeclasses (les deux partagent le même nom dans ce cas, mais sont des classes distinctes qui vivent dans leurs espaces de noms respectifs).
Les filtres globaux de l'API Web sont enregistrés via l' HttpConfigurationobjet mis à votre disposition dans la Registerméthode WebApiConfig.cs si vous utilisez un modèle de projet avec WebActivator:
public static void Register(HttpConfiguration config)
{
//stuff before
config.Filters.Add(new MyWebApiFilter());
//stuff after
}
ou autrement dans le global.asax.cs:
GlobalConfiguration.Configuration.Filters.Add(new MyWebApiFilter());
Mvc filtres globaux sont enregistrés au moyen d'un GlobalFilterCollectionobjet, qui est à votre disposition par la RegisterGlobalFiltersméthode de FilterConfig.cs pour les projets qui utilisent WebActivator:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//stuff before
filters.Add(new MyMvcFilter());
//stuff after
}
}
ou dans le fichier global.asax.cs en guise de GlobalFilters.Filterscollecte pour ceux sans WebActivator:
GlobalFilters.Filters.Add(new MyMvcFilter());
Il est à noter que dans les deux cas, vous n'avez pas besoin d'hériter du FilterAttributetype approprié . Les filtres d'API Web doivent uniquement implémenter l'interface System.Web.Http.IFilter, tandis que l'inscription de filtre MVC vérifie que votre classe hérite de l'une des rares interfaces de filtre définies dans l' System.Web.Mvcespace de noms.