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

10

我有一个aspnetcore3.1项目,希望设置Kestrel的自定义端口(而不是默认的5000端口)。我可以在Program.cs中添加以下代码来实现。

Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
    webBuilder.ConfigureKestrel(options =>
    {
        options.ListenLocalhost(80);
    });
    webBuilder.UseStartup<Startup>();
})

但这种方法在我的情况下无法应用,所以想知道,如何通过环境变量来实现?

1个回答

20

有多种方法可以实现此目标,具体见此处.

  1. 通过 ASPNETCORE_URLS 环境变量。
  2. 通过 --urls 命令行参数。
  3. 通过 urls 主机配置键。
  4. 通过 UseUrls 扩展方法。

若要通过环境变量实现,请创建名为 ASPNETCORE_URLS 的环境变量,并将其值设置为所需使用的 URL。

通常情况下,这应该是 http://+:<端口> 或者 https://+:<端口>

另一种方法是通过 hostsettings.json 文件进行配置(截至编写本答案时,上述方法中没有描述此方法)。

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

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

以下是来自链接的代码片段,以防该链接失效。

创建包含 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>();
    }
}

3
在Ubuntu上,使用.NET 3.1版本时,URLs参数对我有效。谢谢。 - Soren
3
@Soren 值得注意的是,这仅在将 args 传递给 CreateDefaultBuilder 时才起作用,如果您发现在重构/清理后它停止工作,那么应该考虑这一点。 - ColinM
1
@ColinM 我非常确定这个小评论为我节省了数小时的思考时间。谢谢! - Slappywag

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接