【发布时间】:2020-03-17 12:57:19
【问题描述】:
我定义了一个IAsyncActionFilter(一个微软Action Filter)如下:
public class CustomActionFilter : IAsyncActionFilter
{
public CustomActionFilter()
{
}
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
// do something
}
}
我在ConfigureServices 的startup 下添加了它的声明:
services.AddScoped<CustomActionFilter>();
在ConfigureServices 的末尾,我将其配置为Filter:
services.AddMvc((opts) =>
{
opts.EnableEndpointRouting = false;
opts.Filters.Add(new CustomActionFilter());
});
最后,我在控制器中使用装饰器,用于特定调用,以表明我希望该过滤器应用于该调用:
[ApiController]
[Route("a")]
public class AController : Controller
{
public AController()
{
}
[HttpGet("aa")]
[ServiceFilter(typeof(CustomActionFilter))]
public async Task<IActionResult> DoubleA()
{
// do something after the filter is called
}
}
到目前为止,一切都运行良好,CustomActionFilter 在 DoubleA 控制器创建前后被调用。
问题是 所有 控制器和路由都在使用这个 CustomActionFilter 而不管装饰器。
例如在这个控制器中:
[ApiController]
[Route("b")]
public class BController : Controller
{
public BController()
{
}
[HttpGet("bb")]
public async Task<IActionResult> DoubleB()
{
// do something without any kind of Filter inervention
}
}
CustomActionFilter 也在 DoubleB 之前和之后被调用。
有什么想法我在这里做错了吗?
【问题讨论】:
标签: c# asp.net-core .net-core action-filter asp.net-core-3.1