使用IOverrideFilter覆盖自定义ActionFilters

时间:2015-06-08 15:16:38

标签: asp.net-mvc

我想使用IOverrideFilter界面覆盖我的自定义全局过滤器,但它根本不起作用!代码看起来如下:

public sealed class MyGlobalFilterExceptionAttribute : FilterAttribute, IOverrideFilter
{
    public Type FiltersToOverride
    {
        get { return typeof(ITest); }
    }
}

我的全局过滤器已实现ITest接口。我知道我可以在原始的全局过滤器中实现该任务,但我希望IOverrideFilter这样做。

任何想法?

1 个答案:

答案 0 :(得分:8)

msdn信息并不完全清楚,但IOverrideFilter.FiltersToOverride必须完全以下之一:

  • IActionFilter
  • IAuthorizationFilter
  • IAuthenticationFilter
  • IExceptionFilter

基本上,您无法覆盖特定过滤器,您只能覆盖上述某个类别的所有过滤器。查看source code中的ProcessOverrideFilters方法。

因此,假设您的ITest过滤器属于IActionFilter类型,那么您的覆盖将是(相同的逻辑适用于任何其他过滤器类别):

public Type FiltersToOverride
{
    get { return typeof(IActionFilter); }
}

您还可以使用预定义的OverrideActionFilters(以及其他过滤器类别的类似预定义覆盖属性)。

要获得更细粒度的覆盖,您可能需要开发特定解决方案like this one或编写自己的过滤器提供程序as in this very nice article