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.Http
ad alanı altında yaşarken, MVC System.Web.Mvc
ad 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 Controller
ve Web API'leri adlandırılır ApiController
) MVC filtreleri ve Web API filtreleri farklı FilterAttribute
sı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 HttpConfiguration
nesne 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 GlobalFilterCollection
aracılığıyla kullanabileceğiniz bir nesne yoluyla RegisterGlobalFilters
kaydedilir:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//stuff before
filters.Add(new MyMvcFilter());
//stuff after
}
}
veya GlobalFilters.Filters
WebActivator olmayanlar için toplama yoluyla global.asax.cs dosyasında :
GlobalFilters.Filters.Add(new MyMvcFilter());
Her iki durumda da uygun FilterAttribute
tü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.Mvc
ad alanında tanımlanan bir avuç filtre arayüzünden birini miras aldığından emin olmak için kontrol eder .