我想使用IOverrideFilter
界面覆盖我的自定义全局过滤器,但它根本不起作用!代码看起来如下:
public sealed class MyGlobalFilterExceptionAttribute : FilterAttribute, IOverrideFilter
{
public Type FiltersToOverride
{
get { return typeof(ITest); }
}
}
我的全局过滤器已实现ITest
接口。我知道我可以在原始的全局过滤器中实现该任务,但我希望IOverrideFilter
这样做。
任何想法?
答案 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