bu cevabın MVC 5 / Web API 2'ye kadar geçerli olduğunu unutmayın
Kısa yanıt: MVC ve Web API filtreleri çapraz uyumlu değildir ve bunları genel olarak kaydetmek istiyorsanız, her biri için uygun yapılandırma sınıflarını kullanmanız gerekir.
Uzun yanıt: ASP.NET MVC ve Web API kasıtlı olarak benzer şekilde çalışmak üzere tasarlanmıştır, ancak aslında farklı yaratıklardır.
Web API System.Web.Httpad alanı altında yaşarken, MVC System.Web.Mvcad alanı altında yaşar . İkisi mutlu bir şekilde yan yana yaşayacak, ancak biri diğerini içermiyor ve programlama modelindeki benzerliklere rağmen temeldeki uygulamalar farklı. MVC denetleyicileri ve Web API denetleyicilerinin farklı temel denetleyici sınıflarını devralması gibi (MVC'ler basitçe adlandırılır Controllerve Web API'leri adlandırılır ApiController) MVC filtreleri ve Web API filtreleri farklı FilterAttributesınıflardan miras alır (bu durumda her ikisi de aynı adı paylaşır, ancak canlı olan ayrı sınıflardır) kendi ad alanlarında).
Web API genel filtreleri, WebActivator ile bir proje şablonu kullanıyorsanız, WebApiConfig.cs yönteminde kullanabileceğiniz HttpConfigurationnesne aracılığıyla kaydedilir Register:
public static void Register(HttpConfiguration config)
{
//stuff before
config.Filters.Add(new MyWebApiFilter());
//stuff after
}
veya aksi takdirde global.asax.cs içinde:
GlobalConfiguration.Configuration.Filters.Add(new MyWebApiFilter());
Mvc genel filtreleri, WebActivator kullanan projeler için FilterConfig.cs yöntemi GlobalFilterCollectionaracılığıyla kullanabileceğiniz bir nesne yoluyla RegisterGlobalFilterskaydedilir:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//stuff before
filters.Add(new MyMvcFilter());
//stuff after
}
}
veya GlobalFilters.FiltersWebActivator olmayanlar için toplama yoluyla global.asax.cs dosyasında :
GlobalFilters.Filters.Add(new MyMvcFilter());
Her iki durumda da uygun FilterAttributetürden miras almanıza gerek olmadığını belirtmek gerekir . Web API Filtreleri yalnızca System.Web.Http.IFilter arayüzünü uygulamaya ihtiyaç duyarken, MVC filtre kaydı, sınıfınızın System.Web.Mvcad alanında tanımlanan bir avuç filtre arayüzünden birini miras aldığından emin olmak için kontrol eder .