问题描述
我有自定义动作过滤器 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
}
}