是否可以通过 IIS 从 ASP.NET 核心强制 return 连接 header?

Is it possible to force return the Connection header from ASP.NET Core through IIS?

注意:这与 this question 类似,但与 IIS 有关,而不是 Linux 上的 Azure 应用服务。

我有一个 API 端点用于上传大文件。如果身份验证失败、文件名无效等,则不应上传文件。我们甚至接受校验和,如果文件已存在则跳过上传。

不幸的是,无论我在用户代码中做什么,Kestrel 总是耗尽整个请求 body(有关详细信息,请参阅 this issue)。换句话说,用户必须在获得响应之前“上传”整个文件,即使我的代码没有读取响应 body 并且 return 是一个早期的错误响应。在那个问题上,我收到了一个提示,我可以 return a Connection: close header 来避免这种情况。不幸的是,虽然我在本地调试时在响应中收到 header,但在通过 IIS 进行生产时 运行 时我没有收到它。换句话说,如果 ASP.NET 核心响应中存在 header,IIS 似乎会删除它。

有没有办法通过 IIS 强制 return a Connection: close header?

我认为您可以尝试为您的 asp.net 核心应用程序禁用 allowKeepAlive。

<system.webServer>
    <httpProtocol allowKeepAlive="false" />
</system.webServer>