ASP.NET Core 7.0 重大变更:Kestrel 默认 HTTPS 绑定被移除

ASP.NET Core 7.0 重大变更:Kestrel 默认 HTTPS 绑定被移除

docs This repository contains .NET Documentation. docs 项目地址: https://gitcode.com/gh_mirrors/docs2/docs

变更概述

在 ASP.NET Core 7.0 中,Kestrel 服务器的一个重要变更引起了开发者关注:默认的 HTTPS 地址和端口绑定已被移除。这一变更意味着开发者需要显式配置 HTTPS 端点,而不是依赖框架的默认行为。

变更背景

旧版行为回顾

在 ASP.NET Core 7.0 之前的版本中,当开发者没有显式指定地址和端口,但系统中存在本地开发证书时,Kestrel 会自动绑定到两个默认端点:

  • HTTP: http://localhost:5000
  • HTTPS: https://localhost:5001

新版行为变化

从 ASP.NET Core 7.0 开始,开发者必须通过以下方式之一显式配置 HTTPS 绑定:

  1. 项目中的 launchSettings.json 文件
  2. ASPNETCORE_URLS 环境变量
  3. --urls 命令行参数
  4. urls 主机配置键
  5. UseUrls 扩展方法

值得注意的是,HTTP 的默认绑定行为保持不变,仍然会自动绑定到 http://localhost:5000

变更类型

此变更属于二进制兼容性变更,可能会影响现有应用程序的行为。

变更原因

微软团队做出这一变更主要基于以下考虑:

  1. 开发者体验优化:原先的自动绑定行为不考虑环境配置,当证书尚未被信任时(特别是自签名证书),会导致开发者体验不佳。

  2. 客户端交互问题:当客户端访问使用不受信任证书的 HTTPS 端点时,往往会产生不良用户体验,如静默失败、显示错误或警告页面等,这些都可能引起用户恐慌。

  3. 配置明确性:显式配置 HTTPS 端点使应用程序的行为更加明确和可控,减少了"魔法行为"带来的困惑。

迁移指南

无需操作的情况

如果你的应用满足以下任一条件,则无需进行任何更改:

  • 从未使用过默认的 https://localhost:5001 绑定
  • 已经显式配置了 HTTPS 端点

需要调整的情况

如果你依赖了默认的 HTTPS 绑定,需要按照以下步骤进行迁移:

方法一:通过 launchSettings.json 配置
{
  "profiles": {
    "MyApp": {
      "commandName": "Project",
      "applicationUrl": "http://localhost:5000;https://localhost:5001",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}
方法二:通过环境变量配置
export ASPNETCORE_URLS="http://localhost:5000;https://localhost:5001"
方法三:通过命令行参数配置
dotnet run --urls "http://localhost:5000;https://localhost:5001"
方法四:在 Program.cs 中配置
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseUrls("http://localhost:5000", "https://localhost:5001");

最佳实践建议

  1. 开发环境配置:建议在开发环境中使用 launchSettings.json 进行配置,这样可以保持团队开发环境的一致性。

  2. 生产环境配置:在生产环境中,推荐使用环境变量或专门的配置文件来管理端点配置,避免将敏感信息硬编码在代码中。

  3. 证书管理:确保开发证书已正确安装并信任,可以使用以下命令检查:

    dotnet dev-certs https --check
    
  4. 多环境支持:考虑为不同环境(开发、测试、生产)配置不同的端点,可以通过环境变量轻松切换。

常见问题解答

Q:为什么我的应用在升级到 ASP.NET Core 7.0 后无法通过 HTTPS 访问?

A:这是因为默认 HTTPS 绑定已被移除,你需要按照上文提到的方法之一显式配置 HTTPS 端点。

Q:这个变更会影响生产环境部署吗?

A:通常不会,因为生产环境通常会显式配置服务器端点。这一变更主要影响开发环境的默认行为。

Q:如何验证我的 HTTPS 配置是否正确?

A:你可以使用浏览器访问 https://localhost:5001(或你配置的其他 HTTPS 地址),如果看到预期的应用界面且没有证书警告,说明配置正确。

总结

ASP.NET Core 7.0 中移除 Kestrel 默认 HTTPS 绑定的变更,虽然带来了一些迁移工作,但从长远看提高了配置的明确性和开发者体验。通过显式配置 HTTPS 端点,开发者可以更好地控制应用程序的行为,避免因自动绑定带来的潜在问题。建议开发者尽快检查现有项目并进行必要的配置更新。

docs This repository contains .NET Documentation. docs 项目地址: https://gitcode.com/gh_mirrors/docs2/docs

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钱恺才Grace

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值