Я определил IAsyncActionFilter
(Microsoft Фильтр действий ) следующим образом:
public class CustomActionFilter : IAsyncActionFilter
{
public CustomActionFilter()
{
}
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
// do something
}
}
Я добавил его объявление под startup
в ConfigureServices
:
services.AddScoped<CustomActionFilter>();
И в конце ConfigureServices
я настраиваю его как Filter
:
services.AddMvc((opts) =>
{
opts.EnableEndpointRouting = false;
opts.Filters.Add(new CustomActionFilter());
});
Наконец, я использую декоратор в контроллере, для уточнения c вызов, чтобы указать, что я хочу, чтобы этот фильтр применялся в этом вызове:
[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
.
Проблема в том, что ALL контроллеры и маршруты используют это 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
.
Есть идеи, что я здесь не так делаю?