在2.2.0上,我具有以下内容来创建WebHostBuilder。然后,我叫.Build().Run()
public IWebHostBuilder CreateWebHostBuilder(CommandLineOptions commandLineOptions, Type startupType, IConfiguration configuration, ILogger logger)
{
if (builder == null)
{
builder = WebHost.CreateDefaultBuilder(commandLineOptions?.Args)
.ConfigureAppConfiguration(configBuilder =>
{
configBuilder.Sources.Clear();
configBuilder.AddConfiguration(configuration);
})
.UseEnvironment(configuration.GetValue<string>("Environment"))
.UseStartup(startupType)
.UseUrls(configuration.GetValue<string>("HostUrl")) //"http://*:8000/"
.UseSerilog(logger);
}
return builder;
}
升级到3.1.3后,它仍然可以工作。然后根据迁移文档更改为以下内容
public IHostBuilder CreateHostBuilder(CommandLineOptions commandLineOptions, Type startupType, IConfiguration configuration, ILogger logger)
{
if (builder == null)
{
builder = Host.CreateDefaultBuilder(commandLineOptions?.Args)
.ConfigureAppConfiguration(configBuilder =>
{
configBuilder.Sources.Clear();
configBuilder.AddConfiguration(configuration);
})
.UseEnvironment(configuration.GetValue<string>("Environment"))
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup(startupType);
webBuilder.UseUrls(configuration.GetValue<string>("HostUrl")); //"http://*:8000/"
})
.UseSerilog(logger);
}
return builder;
}
但是,现在不管我做什么,它都会监听http://localhost:5000和https://localhost:5001的默认端口。 我没有hostsettings.json文件,launchSettings.json也没有任何设置,我的环境变量中没有设置。我已经从命令行指定了所需的网址,但是没有任何效果。
编辑:感谢Martin Staufcik提出的将配置最小化的建议,我注意到将ConfigureAppConfiguration
更改为ConfigureHostConfiguration
已解决了该问题。我还注意到,如果我将其保留为ConfigureAppConfiguration
并删除configBuilder.Sources.Clear();
行,它也会起作用。
我已经查看了两者之间的区别,但是我仍然不明白这里发生了什么。
答案 0 :(得分:0)
我与.UseUrls
一起工作浪费了几个小时。在注意到代码行的顺序很重要之后,我终于开始工作了!就我而言,有效的方法是在UseUrls
之前先叫UseStartup
。
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseUrls(configuration.GetValue<string>("HostUrl")); //"http://*:8000/"
webBuilder.UseStartup(startupType);
})