从2.2.0迁移到.net Core 3.1.3时无法更改端口

时间:2020-04-07 06:42:10

标签: asp.net-core asp.net-core-webapi asp.net-core-3.1

在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:5000https://localhost:5001的默认端口。 我没有hostsettings.json文件,launchSettings.json也没有任何设置,我的环境变量中没有设置。我已经从命令行指定了所需的网址,但是没有任何效果。

编辑:感谢Martin Staufcik提出的将配置最小化的建议,我注意到将ConfigureAppConfiguration更改为ConfigureHostConfiguration已解决了该问题。我还注意到,如果我将其保留为ConfigureAppConfiguration并删除configBuilder.Sources.Clear();行,它也会起作用。

我已经查看了两者之间的区别,但是我仍然不明白这里发生了什么。

1 个答案:

答案 0 :(得分:0)

我与.UseUrls一起工作浪费了几个小时。在注意到代码行的顺序很重要之后,我终于开始工作了!就我而言,有效的方法是在UseUrls之前先叫UseStartup

.ConfigureWebHostDefaults(webBuilder =>
{                        
    webBuilder.UseUrls(configuration.GetValue<string>("HostUrl")); //"http://*:8000/"   
    webBuilder.UseStartup(startupType);
})