【问题标题】:ASP.NET Core MVC: Issuing just-in-time response headers from IAsyncAlwaysRunResultFilter throws under Kestrel, but works under IIS ExpressASP.NET Core MVC:从 IAsyncAlwaysRunResultFilter 发出即时响应标头在 Kestrel 下抛出,但在 IIS Express 下有效
【发布时间】:2021-07-09 08:22:06
【问题描述】:

我有一个定期发布自定义响应标头的应用。只有在请求开始时检测到特定条件,然后在将响应提供给客户端之前自动发出所需的自定义标头时,才会发生这种情况。

因为这可能在任何时间和任何类型的请求中发生,所以我使用 MVC 的结果过滤器 - IAsyncAlwaysRunResultFilter,具体来说。

这在 IIS Express 下运行良好,因为过滤器总是在响应开始提供给客户端之前触发,因此可以成功写入自定义标头。

但是在我将项目切换到 Kestrel 后,我的过滤器开始出现异常,说 “标题是只读的,响应已经开始。”.

代码中没有其他任何变化,我只是出于不相关的原因切换到 Kestrel。有没有更好的方法来实现我想要的,以便它在两个主机下都可靠地工作?

我唯一的要求是我将它与具体的控制器和动作分开,因为它是一个横切关注点,不应该污染每个动作的代码。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-core iis-express kestrel-http-server


    【解决方案1】:

    我自己解决了这个问题,方法是删除过滤器并将逻辑移动到 Response.OnStarting 回调中,我在请求管道的开头注册了该回调。它现在可以在两个主机下可靠地工作。

    【讨论】:

      猜你喜欢
      • 2019-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多