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.Http
espace de noms, tandis que MVC vit sous l' System.Web.Mvc
espace 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é Controller
et l'API Web est nommé ApiController
), les filtres MVC et les filtres d'API Web héritent de différentes FilterAttribute
classes (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' HttpConfiguration
objet mis à votre disposition dans la Register
mé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 GlobalFilterCollection
objet, qui est à votre disposition par la RegisterGlobalFilters
mé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.Filters
collecte 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 FilterAttribute
type 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.Mvc
espace de noms.