зауважте, що ця відповідь відповідає дійсності до MVC 5 / Web API 2
Коротка відповідь: Фільтри MVC та Web API не є сумісними між собою, і якщо ви хочете зареєструвати їх у всьому світі, ви повинні використовувати відповідні класи конфігурації для кожного.
Довга відповідь: ASP.NET MVC та Web API призначені для роботи аналогічним чином, але вони насправді різні істоти.
Веб-API живе в System.Web.Httpпросторі імен, тоді як MVC живе в System.Web.Mvcпросторі імен. Двоє із задоволенням житимуть пліч-о-пліч, але одна не містить іншої, і незважаючи на подібність у моделі програмування, основні реалізації є різними. Так само, як контролери MVC та контролери Web API успадковують різні базові класи контролерів (MVC просто називають, Controllerа Web API називають ApiController) MVC фільтри та фільтри Web API успадковують від різнихFilterAttribute класів (обидва мають одне і те саме ім'я в цьому випадку, але це окремі класи, які живуть у відповідних просторах імен).
Глобальні фільтри Web API реєструються через HttpConfigurationдоступний вам об’єкт у Registerметоді WebApiConfig.cs, якщо ви використовуєте шаблон проекту з WebActivator:
public static void Register(HttpConfiguration config)
{
//stuff before
config.Filters.Add(new MyWebApiFilter());
//stuff after
}
або іншим чином у global.asax.cs:
GlobalConfiguration.Configuration.Filters.Add(new MyWebApiFilter());
Глобальні фільтри Mvc реєструються за допомогою GlobalFilterCollectionоб’єкта, який доступний вам RegisterGlobalFiltersметодом FilterConfig.cs для проектів, які використовують WebActivator:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//stuff before
filters.Add(new MyMvcFilter());
//stuff after
}
}
або у файл global.asax.cs шляхом GlobalFilters.Filtersколекції для тих, хто не має WebActivator:
GlobalFilters.Filters.Add(new MyMvcFilter());
Варто зазначити, що в обох випадках не потрібно успадковувати від відповідного FilterAttributeтипу. Веб-фільтрам API потрібно реалізувати лише інтерфейс System.Web.Http.IFilter, тоді як реєстрація MVC фільтрів перевіряє, чи відповідає ваш клас одному з декількох інтерфейсів фільтрів, визначених у System.Web.Mvcпросторі імен.