You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

ASP.NET Core中MVC应用指定端口被UseKestrel覆盖的问题求助

ASP.NET Core中MVC应用指定端口被UseKestrel覆盖的问题求助

最近遇到个头疼的问题,折腾好一阵没搞定,来请教下各位大佬!

先贴下我启动项目时的日志:

Building...
✔ HTTPS configured on port 7260 using localhost certificate.
warn: Microsoft.AspNetCore.Server.Kestrel[0]
Overriding address(es) 'http://localhost:7001'. Binding to endpoints defined via IConfiguration and/or UseKestrel() instead.
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://[::]:5162
info: Microsoft.Hosting.Lifetime[14]
Now listening on: https://[::]:7260
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development

我的情况是:同一个解决方案下有两个项目,一个ASP.NET Core Web API,现在正常跑在5162端口,没问题;另一个是ASP.NET Core MVC应用,我本来指定它跑在7001端口,但现在被警告提示说被UseKestrel()或者配置里的端点给覆盖成7260了,而且更糟的是7260端口上这个MVC网站根本打不开!我完全不想让端口被覆盖,想让MVC应用老老实实跑在7001上,有没有大佬能指点下怎么解决?


可能的解决思路(我自己踩过的坑总结)

1. 先检查MVC项目的launchSettings.json

这是最容易出问题的地方,直接去MVC项目的Properties/launchSettings.json里核对:

  • 找到对应启动配置的节点(比如profiles下的自启动profile),确认applicationUrl是不是明确设成了http://localhost:7001(需要HTTPS就再加个HTTPS地址)
  • 顺便看看environmentVariables里有没有ASPNETCORE_URLS这个变量,它会直接覆盖你设置的端口,有的话删掉就好

2. 修正Program.cs里的Kestrel配置

如果你的MVC项目里用了UseKestrel()代码配置端口,大概率是这里的配置冲突了。可以在MVC项目的Program.cs里这么写,明确指定端口:

var builder = WebApplication.CreateBuilder(args);

// 给MVC项目单独配置Kestrel端口,不会影响API项目
builder.WebHost.UseKestrel(options =>
{
    options.ListenAnyIP(7001); // 绑定到7001端口
    // 如果需要HTTPS,就加下面这行(用本地证书的话可以自动生成)
    // options.ListenAnyIP(7002, o => o.UseHttps());
});

// 常规的MVC服务配置
builder.Services.AddControllersWithViews();

var app = builder.Build();

// 中间件配置...
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

注意哦,每个项目的Program.cs是独立的,别改到API项目的配置里去了。

3. 检查appsettings.json里的全局配置

看看MVC项目的appsettings.Development.json里有没有Kestrel节点的配置,比如:

"Kestrel": {
  "Endpoints": {
    "Http": {
      "Url": "http://localhost:7260"
    }
  }
}

如果有,直接把端口改成7001,或者删掉整个Kestrel节点,让launchSettings里的配置生效。

4. 确认启动方式没搞错

用Visual Studio启动的话,一定要选对MVC项目作为启动项目,而且启动profile要选你配置好的那个;如果用命令行启动,就用dotnet run --project 你的MVC项目路径,别额外加--urls参数,不然也会覆盖端口。

我之前遇到类似问题就是launchSettings里藏了个ASPNETCORE_URLS变量,删了就好了。你可以按上面的步骤一个个排查,应该能解决!如果还有细节比如具体的配置代码可以补充,我再帮你盯~

火山引擎 最新活动