зауважте, що ця відповідь відповідає дійсності до 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
просторі імен.