中间件:HTTPS 重定向中间件会在 HTTPS 端口不明确时引发异常

在 ASP.NET Core 6.0 中, HTTPS 重定向中间件 在服务器配置中找到多个 HTTPS 端口时会引发类型 InvalidOperationException 异常。 异常的消息包含文本“无法确定来自 IServerAddressesFeature 的 https 端口,找到多个值。 在 HttpsRedirectionOptions.HttpsPort 上明确地设定你所需的端口。

有关讨论,请参阅 GitHub 问题 dotnet/aspnetcore#29222

已引入的版本

ASP.NET Core 6.0

旧行为

当 HTTPS 重定向中间件未显式配置端口时,它会在第一个请求期间搜索 IServerAddressesFeature,以确定它应该重定向到的 HTTPS 端口。

如果没有 HTTPS 端口或多个不同的端口,则不清楚应使用哪个端口。 中间件记录警告并自动禁用。 HTTP 请求正常处理。

新行为

当 HTTPS 重定向中间件未显式配置端口时,它会在第一个请求期间搜索 IServerAddressesFeature,以确定它应该重定向到的 HTTPS 端口。

如果没有 HTTPS 端口,中间件仍会记录警告并禁用自身。 HTTP 请求正常处理。 此行为支持:

  • 没有 HTTPS 的开发方案。
  • TLS 在到达服务器之前已终止的托管方案。

如果有多个不同的端口,则不清楚应使用哪个端口。 中间件会引发异常并失败 HTTP 请求。

更改原因

当已知 HTTPS 可用时,此更改可防止通过未加密的 HTTP 连接提供潜在的敏感数据。

若要在服务器具有多个不同的 HTTPS 端口时启用 HTTPS 重定向,必须在配置中指定一个端口。 有关详细信息,请参阅 端口配置

如果应用中不需要 HTTPS 重定向中间件,请从UseHttpsRedirection中删除

如果需要动态选择正确的 HTTPS 端口,请在 GitHub 问题 dotnet/aspnetcore#21291 中提供反馈。

受影响的 API

HttpsPolicyBuilderExtensions.UseHttpsRedirection