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变量,删了就好了。你可以按上面的步骤一个个排查,应该能解决!如果还有细节比如具体的配置代码可以补充,我再帮你盯~




