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

如何解决部署在Heroku上的ASP.NET Core API项目出现的H10错误?

问题根因

该错误是ASP.NET Core应用未适配Heroku的动态端口分配规则导致的启动失败。Heroku不会为应用分配固定端口,容器启动时会通过PORT环境变量注入动态分配的可用端口,应用必须主动监听该端口才能正常启动。

解决方法

1. 修改应用端口监听逻辑

根据你使用的.NET版本修改对应代码:

  • .NET 6+ 极简API模式,修改Program.cs:
    var builder = WebApplication.CreateBuilder(args);
    // 新增以下配置,优先读取Heroku注入的PORT变量,本地开发时默认使用5000端口
    string port = Environment.GetEnvironmentVariable("PORT") ?? "5000";
    builder.WebHost.UseUrls($"http://*:{port}");
    
    // 原有服务注册、中间件配置逻辑无需修改
    
  • .NET 5及更早版本,修改Program.cs的CreateHostBuilder方法:
    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
                // 新增端口配置
                string port = Environment.GetEnvironmentVariable("PORT") ?? "5000";
                webBuilder.UseUrls($"http://*:{port}");
            });
    

2. 修正Dockerfile配置

不要在Dockerfile中强制指定固定启动端口,也不需要额外声明EXPOSE指令(Heroku会主动忽略该配置),启动命令保持最简即可:

# 其他镜像构建逻辑保持不变
ENTRYPOINT ["dotnet", "替换为你的项目输出dll名称.dll"]

3. 额外排查项

如果修改后仍有问题,检查以下配置:

  • 关闭HTTPS重定向中间件,Heroku会自行处理SSL终止,应用仅需监听HTTP即可,强制HTTPS跳转会导致请求异常
  • 确认本地构建的镜像可以正常运行,不存在依赖缺失、配置文件丢失等基础问题
  • 确认Heroku应用的运行时堆栈与你的项目.NET版本兼容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:06:06