【发布时间】:2019-05-13 12:42:01
【问题描述】:
在我的 WebApi 2 应用程序中,我的基本控制器中有一个操作过滤器属性,该属性有一个布尔属性,其默认值可以在构造函数中设置:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyActionFilterAttribute : ActionFilterAttribute
{
public bool MyProperty {get; set;}
public MyActionFilterAttribute(bool myProperty = true)
{
MyProperty = myProperty;
}
public override void OnActionExecuting(HttpActionContext actionContext)
{
if(MyProperty)
{
//DO Something
}
}
}
我还在 webApi 配置中配置了 CustomValidatorFilter:
config.Filters.Add(new CustomValidatorFilterAttribute());
在我的控制器的某些操作中,我想通过将 MyProperty 的值设置为 false 来覆盖 MyActionFilterAttribute 的行为,我已将 OverrideActionFilters 添加到我的操作中:
[OverrideActionFilters]
[MyActionFilterAttribute(myProperty: false)]
public IHttpActionResult MyCation()
{
//Some staff here
}
但是现在我的自定义验证不再起作用,因为使用了OverrideActionFilters,有没有办法重新定义 OverrideActionFilters,或者只是列出要覆盖的过滤器。
感谢您的帮助。
【问题讨论】:
-
您能否澄清一下这与问题标题的对应关系?
-
对不起,我忘记更新标题了
-
嗯,首先,授权过滤器不应该是操作过滤器。这就是
IAuthorizationFilters 存在的原因。它们在生命周期中的不同点运行(在操作过滤器之前),并且它们还被传递了一个 ActionFilters 没有的 AuthorizationContext。如果设置了某个值,您可以轻松构建一种机制使过滤器不执行任何操作 -
假设这不是授权属性,只是一个简单的过滤器,我已经更新了问题
标签: c# asp.net-web-api2 custom-action-filter