ASP.NET Core 7.0 重大变更:Kestrel 默认 HTTPS 绑定被移除
docs This repository contains .NET Documentation. 项目地址: 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 绑定:
- 项目中的
launchSettings.json
文件 ASPNETCORE_URLS
环境变量--urls
命令行参数urls
主机配置键UseUrls
扩展方法
值得注意的是,HTTP 的默认绑定行为保持不变,仍然会自动绑定到 http://localhost:5000
。
变更类型
此变更属于二进制兼容性变更,可能会影响现有应用程序的行为。
变更原因
微软团队做出这一变更主要基于以下考虑:
-
开发者体验优化:原先的自动绑定行为不考虑环境配置,当证书尚未被信任时(特别是自签名证书),会导致开发者体验不佳。
-
客户端交互问题:当客户端访问使用不受信任证书的 HTTPS 端点时,往往会产生不良用户体验,如静默失败、显示错误或警告页面等,这些都可能引起用户恐慌。
-
配置明确性:显式配置 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");
最佳实践建议
-
开发环境配置:建议在开发环境中使用
launchSettings.json
进行配置,这样可以保持团队开发环境的一致性。 -
生产环境配置:在生产环境中,推荐使用环境变量或专门的配置文件来管理端点配置,避免将敏感信息硬编码在代码中。
-
证书管理:确保开发证书已正确安装并信任,可以使用以下命令检查:
dotnet dev-certs https --check
-
多环境支持:考虑为不同环境(开发、测试、生产)配置不同的端点,可以通过环境变量轻松切换。
常见问题解答
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. 项目地址: https://gitcode.com/gh_mirrors/docs2/docs
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考