防止aspnetcore webapi中的重复过滤器

时间:2018-06-19 10:40:27

标签: c# asp.net-core asp.net-core-webapi

情况是我在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){... }

实际发生的事情是我的过滤器被执行两次,这是不是我想要的。是否有某种方法

  • 防止过滤器执行两次,并且仅将一个关闭应用于呼叫站点(即,直接在该方法上的属性)或;
  • 检测过滤器执行时是否应用了多个

0 个答案:

没有答案