如何解决使用操作级别操作过滤器覆盖控制器级别操作过滤器
我有自定义动作过滤器 DemoActionFilter ,但是我不需要为每个动作一个接一个地应用此过滤器,因为如果控制器有很多动作,那将很麻烦。
我们如何添加控制器级别,但从操作级别忽略控制器级别。 例如:更高级别的授权将被AllowAnonymous
忽略[Route("api/sample")]
[ApiController]
[TypeFilter(typeof(DemoActionFilter))]
public class SampleController : BaseController
{
[HttpGet("one")]
public object Sample()
{
}
//I don't need to apply controller level action filter for this action
[HttpGet("two")]
public object Sample2()
{}
}
public class DemoActionFilter: IAsyncActionFilter
{
public async Task OnActionExecutionAsync(ActionExecutingContext context,ActionExecutionDelegate next)
{
//DO what ever
}
}
解决方法
据我所知,没有内置方法可以忽略控制器过滤器,如AllowAnonymous属性。
如果要忽略控制器过滤器中的Sample2。您可以尝试在OnActionExecuting方法中创建if条件,如下所示:
public void OnActionExecuting(ActionExecutingContext context)
{
var actionName = ((ControllerBase)context.Controller)
.ControllerContext.ActionDescriptor.ActionName; ;
if (actionName != "two")
{
//... do what you want
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。