filters.Add vs FilterProviders.Providers.Add

use*_*648 3 asp.net-mvc asp.net-mvc-3 asp.net-mvc-filters

我遇到了一个示例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)
}
Run Code Online (Sandbox Code Playgroud)

两者MyProvider1MyProvider2用实现IResultFilter了,我很困惑,为什么他们中的一个被添加到FilterProviders另一种是注册为一个全球性的过滤器.

为什么以及何时应该添加自定义过滤器FilterProvider,以及为什么以及何时将它们注册为全局过滤器?

mar*_*ind 9

GlobalFilters.Filters过滤器添加过滤器时,将为每个请求执行过滤器.

当您IFilterProviderFilterProviders.Providers筛选器提供程序添加时,将有机会确定特定筛选器是否适用于当前请求.

FilterProviders为您提供更好的控制,同时GlobalFilters可以轻松为整个站点注册过滤器.