使用IOverrideFilter覆盖自定义ActionFilters

Mor*_*ori 7 asp.net-mvc

我想使用IOverrideFilter接口覆盖我的自定义全局过滤器,但它根本无法正常工作!代码看起来如下:

public sealed class MyGlobalFilterExceptionAttribute : FilterAttribute, IOverrideFilter
{
    public Type FiltersToOverride
    {
        get { return typeof(ITest); }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

任何的想法??

Dan*_*.G. 8

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

  • IActionFilter
  • IAuthorizationFilter
  • IAuthenticationFilter
  • IExceptionFilter

基本上,您无法覆盖特定过滤器,您只能覆盖上述某个类别的所有过滤器.看看源代码中ProcessOverrideFilters方法.

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

public Type FiltersToOverride
{
    get { return typeof(IActionFilter); }
}
Run Code Online (Sandbox Code Playgroud)

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

对于更精细的覆盖,您可能需要开发像这样的特定解决方案或编写自己的过滤器提供程序,就像这篇非常好的文章