Beachten Sie, dass diese Antwort bis zu MVC 5 / Web API 2 gilt
Kurze Antwort: MVC- und Web-API-Filter sind nicht miteinander kompatibel. Wenn Sie sie global registrieren möchten, müssen Sie jeweils die entsprechenden Konfigurationsklassen verwenden.
Lange Antwort: ASP.NET MVC und Web API sind absichtlich so konzipiert, dass sie auf ähnliche Weise funktionieren, aber es handelt sich tatsächlich um unterschiedliche Kreaturen.
Die Web-API befindet sich unter dem System.Web.Http
Namespace, während MVC unter dem System.Web.Mvc
Namespace lebt . Die beiden werden glücklich nebeneinander leben, aber eines enthält das andere nicht und trotz der Ähnlichkeiten im Programmiermodell sind die zugrunde liegenden Implementierungen unterschiedlich. So wie MVC-Controller und Web-API-Controller unterschiedliche Basis-Controller-Klassen erben (MVCs werden einfach benannt Controller
und Web-APIs werden benannt ApiController
), erben MVC-Filter und Web-API-Filter von verschiedenen FilterAttribute
Klassen (beide haben in diesem Fall denselben Namen, sind jedoch separate Klassen, die leben in ihren jeweiligen Namespaces).
Globale Web-API-Filter werden über das HttpConfiguration
Objekt registriert, das Ihnen in der Register
Methode WebApiConfig.cs zur Verfügung steht, wenn Sie eine Projektvorlage mit WebActivator verwenden:
public static void Register(HttpConfiguration config)
{
//stuff before
config.Filters.Add(new MyWebApiFilter());
//stuff after
}
oder anders in der global.asax.cs:
GlobalConfiguration.Configuration.Filters.Add(new MyWebApiFilter());
Globale Mvc-Filter werden über ein GlobalFilterCollection
Objekt registriert , das Ihnen über die RegisterGlobalFilters
Methode FilterConfig.cs für Projekte zur Verfügung steht, die WebActivator verwenden:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//stuff before
filters.Add(new MyMvcFilter());
//stuff after
}
}
oder in der Datei global.asax.cs als GlobalFilters.Filters
Sammlung für Personen ohne WebActivator:
GlobalFilters.Filters.Add(new MyMvcFilter());
Es ist erwähnenswert, dass Sie in beiden Fällen nicht vom entsprechenden FilterAttribute
Typ erben müssen . Web-API-Filter müssen nur die System.Web.Http.IFilter-Schnittstelle implementieren, während die MVC-Filterregistrierung überprüft, ob Ihre Klasse eine von wenigen im System.Web.Mvc
Namespace definierten Filterschnittstellen erbt .