Как изменить порт прослушивания Kestrel (AspNetCore) с помощью переменных среды в netcore3.1

У меня есть проект aspnetcore3.1, и я хочу установить собственный порт для Kestrel (кроме 5000 по умолчанию). Я могу сделать это за Program.cs, добавив

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

Но это не применимо к моему случаю, поэтому задался вопросом, как это можно сделать с помощью переменной окружения?


person shaderzak    schedule 10.02.2020    source источник


Ответы (1)


Есть несколько способов добиться этого как описано здесь.

  1. Переменная среды ASPNETCORE_URLS.
  2. --urls аргумент командной строки.
  3. ключ конфигурации хоста urls.
  4. Метод расширения UseUrls.

Чтобы добиться этого с помощью переменной среды, просто создайте переменную среды с именем ASPNETCORE_URLS и установите значение URL-адреса, который вы хотите использовать.

Обычно это http://+:<port> или https://+:<port>

Другой метод, который на момент написания этого ответа не описывался выше, - это файл hostsettings.json.

Вы можете настроить URL-адрес и порт, создав файл конфигурации hostsettings.json и добавив ключ urls, а затем добавив hostsettings.json в свой IConfigurationBuilder при создании своего WebHostBuilder.

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

Вот фрагмент кода из ссылки на случай, если эта ссылка когда-нибудь отключится.

Создайте файл hostsettings.json, содержащий ключ urls с вашими значениями.

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

Зарегистрируйте hostsettings.json в своем IConfigurationBuilder

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>();
    }
}
person ColinM    schedule 10.02.2020
comment
Аргумент --URLs работает для меня в .NET 3.1 на Ubuntu, tnx. - person Soren; 23.01.2021
comment
@Soren стоит иметь в виду, что это работает только тогда, когда args передается в CreateDefaultBuilder, если вы когда-нибудь окажетесь в сценарии, когда это перестает работать после рефакторинга / очистки. - person ColinM; 25.01.2021