【问题标题】:Order of global filters in ASP.NET CoreASP.NET Core 中全局过滤器的顺序
【发布时间】:2017-05-10 08:33:37
【问题描述】:

我在 Startup 中有两个全局异常过滤器

config.Filters.AddService(typeof(ExceptionFilter));

config.Filters.AddService(typeof(JsonExceptionFilter));

我一直认为如果先添加相同的过滤器,它会先执行。

但是当我首先添加ExceptionFilter 时,它会在第二个执行。

更新 1

ConfigureServices方法:

services
    .AddMvc(
         config =>
         {
            config.Filters.AddService(typeof(ExceptionFilter));
            config.Filters.AddService(typeof(JsonExceptionFilter));
         });

【问题讨论】:

  • ExceptionFilterJsonExceptionFilter 是什么样的?
  • 简单的异常处理程序,其中之一是记录 secod 并处理 ajax 错误请求
  • 您是否尝试过颠倒注册它们的顺序,看看它们是否以相反的顺序执行?也许它们是按 LIFO 顺序执行的。
  • 是的,当我更改注册顺序时,执行顺序也会更改。
  • 您能否编辑您的问题以显示更多关于您的创业公司的信息 - 我无法确定 config 的来源

标签: c# asp.net-core action-filter


【解决方案1】:

使用 MVC,您可以指定一个 order 值来确定过滤器的执行顺序。我不知道这是否同样适用于 ASP.NET Core,而且我面前没有 IDE 可以检查。你介意试试这个吗?

config.Filters.AddService(typeof(ExceptionFilter), 2);
config.Filters.AddService(typeof(JsonExceptionFilter), 1);

即使不是这样,请检查是否有另一个 AddService 重载确实接受参数来指定顺序。

【讨论】:

  • 好的,还有其他选项。所以这将解决问题。但是我很惊讶订单不是由添加顺序预先确定的
  • @Marcin 有更多关于执行顺序的信息here,但它更多地讨论了操作过滤器的顺序,而不是多个异常过滤器如何协同工作。正如我上面提到的,我的猜测是它们是使用 LIFO 顺序作为堆栈执行的。
猜你喜欢
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-13
  • 2016-02-23
  • 1970-01-01
  • 2018-05-12
  • 1970-01-01
相关资源
最近更新 更多