情况是我在aspnetcore 2.0 web api项目中实现了IAsyncActionFilter
:
public class MyFilter: Attribute, IAsyncActionFilter
{
private readonly string aSetting;
public MyFilter() {}
public MyFilter(string aSetting)
{
this.aSetting = aSetting;
}
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
// Do something - what depends on the value of aSetting
}
}
正如您所看到的,有一个构造函数需要一些值,而另一个构造函数将它留空,并且实现执行一些不同的操作,具体取决于它是否已设置。这可以通常的方式应用于控制器方法
[Route("api/[controller]")]
public class MyController : Controller
{
[HttpGet(""),MyFilter]
public Task Get(){... }
[HttpGet("{id}"),MyFilter("some setting")]
public Task Get(int id){... }
}
我还可以选择在setup.cs
期间以通常的方式将此过滤器应用于整个项目:
services.AddMvc(options =>
{
options.Filters.Add(new MyFilter());
});
我的问题围绕着上面的内容,但后来能够覆盖控制器方法中的设置。假设我已将过滤器应用于setup.cs中的所有路由,但随后选择覆盖:
[HttpGet("{id}"),MyFilter("override setting")]
public Task Get(int id){... }
实际发生的事情是我的过滤器被执行两次,这是不是我想要的。是否有某种方法