升级到 .NET 6 后 IIS 子应用程序未处理请求 - 返回 307

Posted

技术标签:

【中文标题】升级到 .NET 6 后 IIS 子应用程序未处理请求 - 返回 307【英文标题】:IIS sub application not handling requests after upgrading to .NET 6 - returning 307 【发布时间】:2021-12-28 23:31:48 【问题描述】:

在安装 .NET 6 SDK + 托管包后,我们的应用程序像以前一样停止处理请求。

IIS 设置如下:

在 .NET 4.7 上运行的根应用程序 在 .NET core 3.1 上运行的多个子应用程序(进程外) Haproxy 在前面,向 IIS 发送未加密的 HTTP 请求(和签名请求)。

根应用工作正常,但子应用像以前一样停止处理请求。

在子应用程序上启用标准输出日志后,我看到了请求,但似乎第一个 URL 段没有按应有的方式处理。

这是日志:

info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/1.1 GET http://subdomain.domain.net/subapplication/ping  0
trce: Microsoft.AspNetCore.HostFiltering.HostFilteringMiddleware[2]
      All hosts are allowed.
dbug: Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware[4]
      The request path /ping does not match a supported file type
dbug: Microsoft.AspNetCore.HttpsPolicy.HttpsRedirectionMiddleware[1]
      Redirecting to 'https://subdomain.domain.net/subapplication/ping'.
dbug: Microsoft.AspNetCore.Server.Kestrel[9]
      Connection id "0HMDA5V61D9BR" completed keep alive response.
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      Request finished in 1.2475ms 307 

似乎发生的事情是请求错过了控制器中间件,并转到下一个:StaticFile 中间件。

好像在安装 .NET 6 之后,子应用程序不知道它在日志中的路径名 subapplication

我尝试卸载 .NET 6(+runtime+hosting bundle 等),但没有成功。 我还尝试强制安装 .NET 3.1,但又没有运气。

为了恢复以前的正确行为,我没有想法..

什么参数会对子应用第一个 URL 段处理产生如此大的影响?以及如何解决这个问题?

【问题讨论】:

【参考方案1】:

通过删除 app.UseHttpsRedirection(); 中间件来解决问题..

但我们仍然不明白安装 .NET 6 如何改变了某些应用(但不是全部)和某些 IIS 服务器(但不是全部)上的应用行为。

【讨论】:

以上是关于升级到 .NET 6 后 IIS 子应用程序未处理请求 - 返回 307的主要内容,如果未能解决你的问题,请参考以下文章

.NET 升级发布后,IIS出现了System.IO.DirectoryNotFoundException

.NET 升级发布后,IIS出现了System.IO.DirectoryNotFoundException

.NET 升级发布后,IIS出现了System.IO.DirectoryNotFoundException

Asp.net MVC5 angular4未捕获引用错误:部署到IIS后系统未在systemjs.config.js中定义

升级到 .NET 6 时,Web 项目引发运行时异常

ASP.NET iis发布网站后,浏览报错。虚拟路径“/aspx/login.aspx”映射到另一个应用程序,这是不允许的。