Filters.add против FilterProviders.Providers.Add
-
24-10-2019 - |
Вопрос
Я наткнулся на образец кода MVC3, который следил за Global.asax
файл:
public static void RegisterGlobalFilters(....)
{
filters.Add(new MyFilter1());
....
var provider = new MyFilterProvider();
provider.Add(c => c.HttpContext.IsDebuggingEnabled ? new MyProvider2() : null);
FilterProviders.Providers.Add(provider)
}
Оба MyProvider1
а также MyProvider2
реализованы с IResultFilter
, и я смущен, почему один из них добавлен в FilterProviders
а другой зарегистрирован как глобальный фильтр.
Почему и когда мы должны добавлять пользовательские фильтры на FilterProvider
, и почему и когда мы должны зарегистрировать их как глобальные фильтры?
Решение
Когда вы добавляете фильтр в GlobalFilters.Filters
Фильтр будет выполняться для каждого запроса.
Когда вы добавляете IFilterProvider
к FilterProviders.Providers
У поставщика фильтра будет возможность решить, применяется ли конкретный фильтр к текущему запросу.
FilterProviders
дает вам больший контроль, пока GlobalFilters
Облегчает регистрацию фильтра для всего сайта.