如何在 netcore3.1 中通过环境变量更改 Kestrel (AspNetCore) 监听端口

How can I change Kestrel (AspNetCore) listening port by environment variables in netcore3.1

我有 aspnetcore3.1 项目,我想为 Kestrel 设置自定义端口(默认 5000 除外)。我可以通过添加

Program.cs 中做到这一点
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
    webBuilder.ConfigureKestrel(options =>
    {
        options.ListenLocalhost(80);
    });
    webBuilder.UseStartup<Startup>();
})

但这不适用于我的情况,所以想知道,这怎么可以通过环境变量来完成?

有多种方法可以实现此目的as documented here

  1. ASPNETCORE_URLS environment variable.
  2. --urls command-line argument.
  3. urls host configuration key.
  4. UseUrls extension method.

要使用环境变量实现此目的,只需创建一个名为 ASPNETCORE_URLS 的环境变量并将值设置为您想要使用的 URL

通常是 http://+:<port>https://+:<port>

在撰写此答案时,上面未描述的另一种方法是通过 hostsettings.json 文件。

您可以通过创建 hostsettings.json 配置文件并添加 urls 键来配置 URL 和端口,然后将 hostsettings.json 添加到您的 IConfigurationBuilder在构建 WebHostBuilder.

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/web-host?view=aspnetcore-3.1#override-configuration

这是来自 link 的代码片段,以防这个 link 死掉。

创建包含 urls 键和您的值的 hostsettings.json 文件

{
    urls: "http://*:5005"
}

在您的 IConfigurationBuilder

中注册 hostsettings.json
public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args)
    {
        var config = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json", optional: false)
            .AddJsonFile("hostsettings.json", optional: true)
            .AddCommandLine(args)
            .Build();

        return WebHost.CreateDefaultBuilder(args)
            .UseUrls("http://*:5000")
            .UseConfiguration(config)
            .UseStartup<Startup>();
    }
}