.net core 使用操作级操作筛选器覆盖控制器级操作筛选器
我有自定义动作过滤器DemoActionFilter,但我不需要对每个动作逐一应用此过滤器,因为如果控制器有很多动作,那么它将是一个混乱的过程 我们如何添加控制器级别,但从操作级别忽略控制器级别。 例如:更高级别的授权将以AllowAnonymous忽略.net core 使用操作级操作筛选器覆盖控制器级操作筛选器,.net-core,filter,overriding,asp.net-core-webapi,action,.net Core,Filter,Overriding,Asp.net Core Webapi,Action,我有自定义动作过滤器DemoActionFilter,但我不需要对每个动作逐一应用此过滤器,因为如果控制器有很多动作,那么它将是一个混乱的过程 我们如何添加控制器级别,但从操作级别忽略控制器级别。 例如:更高级别的授权将以AllowAnonymous忽略 [Route("api/sample")] [ApiController] [TypeFilter(typeof(DemoActionFilter))] public class SampleController : Bas
[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
}
}
张:是的,我也明白,你是一个没有内置的方法。我也遵循了你提到的逻辑。无论如何,谢谢。