3

我遇到了一个示例 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)
}

两者MyProvider1MyProvider2都是用 实现的IResultFilter,我很困惑为什么其中一个被添加到FilterProviders另一个被注册为全局过滤器。

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

4

1 回答 1

9

当您向过滤器添加过滤GlobalFilters.Filters器时,每个请求都会执行该过滤器。

当您IFilterProviderFilterProviders.Providers过滤器添加一个时,提供者将有机会决定一个特定的过滤器是否适用于当前请求。

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

于 2011-03-15T17:01:24.657 回答