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

.NET 5应用可在IIS Express运行,但通过CLI启动Kestrel失败如何解决?

问题原因

报错核心是Kestrel尝试绑定的https://127.0.0.1:5001端口已经被其他进程占用,同时你在代码的UseKestrel()方法里自定义了监听端点,覆盖了默认的5000/5001端口配置,所以启动时会先打印覆盖提示,再抛出端口占用异常。

解决方案

1. 临时解决:终止占用5001端口的进程

  • Windows系统打开管理员权限的命令提示符/PowerShell,执行命令查询占用端口的进程PID:
netstat -ano | findstr :5001

输出结果最后一列就是对应进程的PID,替换下方命令中的<PID>执行即可终止进程:

taskkill /PID <PID> /F
  • Linux/macOS系统执行命令查询PID:
lsof -i :5001

拿到PID后执行终止命令:

kill -9 <PID>

2. 永久解决:修改Kestrel监听端口

如果不想终止占用端口的进程,可以直接修改应用的监听端口,避免冲突,共有三种修改方式:

方式1:修改代码中的UseKestrel配置

找到Program.cs文件里的UseKestrel()代码段,修改绑定的端口号为未被占用的端口即可,示例:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseKestrel(options =>
            {
                // 替换为其他未被占用的端口
                options.ListenLocalhost(5002); // HTTP监听端口
                options.ListenLocalhost(5003, o => o.UseHttps()); // HTTPS监听端口
            });
            webBuilder.UseStartup<Startup>();
        });

如果没有特殊的自定义监听需求,也可以直接删除UseKestrel()里的端口配置,Kestrel会优先读取配置文件的端口规则,灵活度更高。

方式2:启动时通过命令参数指定端口

不需要修改代码,CLI启动时直接加urls参数指定端口即可:

dotnet run --urls "http://localhost:5002;https://localhost:5003"

方式3:通过appsettings.json配置端口

在appsettings.json文件中添加Kestrel节点,统一配置监听规则:

{
  "Kestrel": {
    "Endpoints": {
      "Http": {
        "Url": "http://localhost:5002"
      },
      "Https": {
        "Url": "https://localhost:5003"
      }
    }
  }
}

3. 同时运行IIS Express和Kestrel的配置方法

只要保证两者的监听端口不重复即可,打开项目Properties文件夹下的launchSettings.json文件,分别配置两种启动方式的端口:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:12345", // IIS Express的HTTP端口,和Kestrel端口不重复
      "sslPort": 44398 // IIS Express的HTTPS端口,和Kestrel端口不重复
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "EmployeeManagement": {
      "commandName": "Project",
      "launchBrowser": true,
      "applicationUrl": "http://localhost:5002;https://localhost:5003", // Kestrel的监听端口
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

配置完成后即可同时启动两种服务,不会出现端口冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:06:01