不能使用`--urls" http:*:8080"`来覆盖端口?

时间:2018-02-25 06:30:48

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

以下链接表示端口可以被命令行参数dotnet run --urls "http://*:8080"覆盖。

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/hosting?tabs=aspnetcore2x#overriding-configuration

以下是我的Asp.Net核心应用程序的Program类。但是,它仍然显示它正在聆听http://localhost:5000

public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseContentRoot(Directory.GetCurrentDirectory())
            .ConfigureAppConfiguration((hostingContext, config) =>
            {
                var env = hostingContext.HostingEnvironment;
                config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                      .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
                config.AddEnvironmentVariables();
                config.AddCommandLine(args);
            })
            .ConfigureLogging((hostingContext, logging) => 
            {
                logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
                logging.AddConsole();
                logging.AddDebug();
            })
            .UseStartup<Startup>()
            .Build();
}

2 个答案:

答案 0 :(得分:1)

为了影响WebHost设置,您需要使用UseConfiguration的实施方式调用IConfiguration。在您的示例中,您仅使用ConfigureAppConfiguration,这不适用于WebHost

以下是一个例子:

var webHostConfiguration = new ConfigurationBuilder()
    .AddEnvironmentVariables()
    .AddCommandLine(args)
    .Build();

return WebHost.CreateDefaultuBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .UseConfiguration(webHostConfiguration)
    .ConfigureAppConfiguration(...) // No changes.
    .Build();

答案 1 :(得分:1)

使用WebHost.CreateDefaultBuilder(args)只适用于 urls ,只能使用ASP.NET Core 2.1版本。

关于此问题/MetaPackages/issues/221fix主要将以下逻辑添加到CreateDefaultBuilder方法

if (args != null)
{
   builder.UseConfiguration(new ConfigurationBuilder().AddCommandLine(args).Build());
}

所以现在你需要直接添加这段代码:

WebHost.CreateDefaultBuilder(args)
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseConfiguration(new ConfigurationBuilder().AddCommandLine(args).Build())
        ...

如果您感兴趣,为什么以下内容不会进行修复

   .ConfigureAppConfiguration((hostingContext, config) =>
   {
      ...
      config.AddCommandLine(args);
   })  

检查此SO post