在 ASP.NET Core 2.1 项目中使用 Kestrel 并在
UseKestrel()
中指定绑定时,会在警告级别记录一条消息:
覆盖地址“http://localhost:50000/”。而是绑定到
中定义的端点。UseKestrel()
这会向我们的日志添加噪音,报告默认(因此令人困惑)URL,并且不应成为警告。除了由记录器本身过滤消息之外,是否有一种方法可以配置 Web 主机构建器,使其在启动时不记录此消息?
这是一个老问题,但您可以使用 "externalUrlConfiguration": true
解决 launchSettings.json
和appSettings.json 之间的冲突
appSettings.json 中的 Kestrel 配置:
"Kestrel": {
"EndpointDefaults": {
"Protocols": "Http1AndHttp2"
},
"Endpoints": {
"HTTPS": {
"Url": "https://localhost:4433"
}
}
这是launchSettings.json内容:
{
"profiles": {
"TestApplication": {
"commandName": "Project",
"launchBrowser": true,
"externalUrlConfiguration": true, //add this line
"applicationUrl": "https://localhost:5001",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
话虽如此,这实际上是一个有用的警告,因为它告诉您已经在多个位置配置了绑定 URL。因此,正确的操作不是忽略该消息,而是实际删除重复的配置。
在这种情况下,您将使用带有
UseKestrel()
的显式监听选项,以便胜过一切。所以你应该删除其他配置。您应该查看以下几个位置:
ASPNETCORE_URLS
环境变量。
ASPNETCORE_SERVER.URLS
环境变量。
Properties/launchSettings.json
.
IWebHostBuilder.UseUrls()
和一个空的网址列表来消除警告。
IWebHostBuilder builder = new WebHostBuilder()
.UseUrls()
.UseKestrel()
.ConfigureKestrel(...
编辑:对于.net6
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseUrls();
launchsettings.json和appsetings.json中包含的配置之间存在冲突
就我而言,在本地开发时,appsetings.json中的 Kestrel 条目:
"kestrel": {
"endpoints": {
"http": {
"url": "http://localhost:5000"
},
"https": {
"url": "https://localhost:5001"
}
}
与
launchsettings.json中的配置文件冲突:
"MyProject-Dev": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "http://localhost:5000;https://localhost:5001",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
我相信正确的位置是在
launchsettings.json 文件中,因此删除 appsettings.json 中的 kestrel 条目解决了我的问题。
中定义了我的网址
我从 appsettings.json 中删除了以下内容,然后警告消失了。
"AllowedHosts": "*"
"env": {
"ASPNETCORE_URLS": "http://localhost:5050"
}