You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下运行ASP.NET Core示例项目URL出现[::]是什么原因?

问题根因

这个问题是两个特性共同作用的结果:

  1. ASP.NET Core绑定主机名时的监听输出逻辑
    当你在applicationUrl中填写主机名(而非直接写IP)时,ASP.NET Core的Kestrel服务器会解析该主机名对应的所有可用IP地址,同时监听所有解析到的IPv4、IPv6地址。在.NET 5及更早版本中,此时Kestrel输出的启动日志里的监听地址会统一展示为Now listening on: http://[::]:5000,而非你配置的主机名地址,用来表示Kestrel正在监听所有可用的IPv6和兼容的IPv4接口。

  2. VS Code C#扩展的serverReadyAction正则匹配逻辑
    你配置的serverReadyAction中的正则\bNow listening on:\s+(https?://\S+)会直接提取日志里输出的http://[::]:5000作为%s的替换值,因此最终拼接出来的跳转地址就是http://[::]:5000/WeatherForecast,而非你预期的主机名地址。

附带问题说明

你之前遇到的Failed to determine the https port for redirect.报错,是因为你移除HTTPS配置后,项目模板默认启用的HttpsRedirectionMiddleware无法找到对应的HTTPS端口,只需要在Startup.cs或者Program.cs里注释掉app.UseHttpsRedirection();这行即可解决,不需要修改监听地址。

解决方案

你可以选择以下任意一种方式解决跳转异常问题:

  • 直接在applicationUrl里填写IP地址而非主机名,符合你目前测试的正常场景
  • 修改serverReadyAction的uriFormat,写死要打开的地址前缀,比如"uriFormat": "http://Linux-2020:5000/WeatherForecast",忽略日志里提取的地址
  • 升级到.NET 6及以上版本,.NET 6之后优化了Kestrel的启动日志输出,绑定单个主机名时会输出对应主机名的地址,而非[::]通配符地址

内容的提问来源于stack exchange,提问作者Jeff Dege

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 18:15:04