Вопрос

Я наткнулся на образец кода 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 Облегчает регистрацию фильтра для всего сайта.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top