Использование appsettings.json для настройки порта прослушивания Kestrel Dotnet core 2 preview 2

Из того, что я понимаю, правильный способ настройки портов прослушивания для ASP Dotnet Core 2 preview 1/2 заключается в создании раздела Kestrel в appsettings.json в следующем формате:

"Kestrel": {
    "EndPoints": { //Could also be Endpoints, it a bit unclear
        "Http": {
        "Address": "127.0.0.1",
    "Port": 9001 //the port you want Kestrel to run on
},

Я попытался настроить образец webapp на машине Debian, но когда я запустил приложение, он записывает, что приложение перечисляет на порт 5000, порт по умолчанию.

Я знаю, что appsettings.json читается, потому что, когда я меняю уровень ведения журнала на Trace, я получаю больше информации о запуске, в том числе о том, что Endpoints не найдено, и приложение будет использовать стандартный порт 5000.

Я попытался найти исходный код aspnet в Github, и я могу найти область, где раздел Kestrel считывается из конфигурации (https://github.com/aspnet/Identity/blob/e38759b8a2de1b7a4a1c19462e40214b43c1cf3b/samples/IdentityOIDCWebApplicationSample/MetaPackage/KestrelServerOptionsSetup.cs), но, как вы видите, это выглядит как образец проекта.

Что мне не хватает, разве это не стандартный способ настройки Kestrel в ASP Dotnet core 2?

Ответ 1

Поддержка конфигурации Kestrel через appsettings.json была сброшена в 2.0.

См. Комментарий к этой проблеме:

Поддержка файла конфигурации kestrel была отключена от 2.0.0. Значения Config должны быть прочитаны вручную в вашем коде инициализации.

Чтобы обойти это, вы можете сделать что-то подобное в program.cs:

public static IWebHost BuildWebHost(string[] args) =>
 WebHost.CreateDefaultBuilder(args)
 .UseStartup < Startup > ()
 .UseKestrel((hostingContext, options) => 
 { 
  if (hostingContext.HostingEnvironment.IsDevelopment) {
   options.Listen(IPAddress.Loopback, 9001);
   options.Listen(IPAddress.Loopback, 9002, listenOptions => {
    listenOptions.UseHttps("certificate.pfx", "password");
   });
  }

 })
 .Build();

Ответ 2

Как упоминалось в комментарии к принятому ответу, 2.1 имеет поддержку appsettings.json, см. Https://blogs.msdn.microsoft.com/webdev/2018/02/02/asp-net-core-2-1-roadmap/#безопасность
Рабочий appsettings.json:

"Kestrel": {
  "EndPoints": {
  "Http": {
  "Url": "http://localhost:5555"
 }}}

Это используется для программы Program.cs (созданной "dotnet new webapi"):

WebHost.CreateDefaultBuilder(args)

Соответствующий исходный код в github https://github.com/aspnet/MetaPackages/blob/master/src/Microsoft.AspNetCore/WebHost.cs#L163

options.Configure(builderContext.Configuration.GetSection("Kestrel"));

и https://github.com/aspnet/MetaPackages/blob/master/src/Microsoft.AspNetCore/WebHost.cs#L169

config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)

Ответ 3

Я использую Program.cs и файл hosting.json для конфигурации Kestrel. Пример:

var config = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("hosting.json", optional: true, reloadOnChange: true)
                .Build();

var host = new WebHostBuilder()
                .UseConfiguration(config)
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseStartup<Startup>();

hosting.json:

{
  "urls": "http://localhost:4444;http://localhost:4445;"
}

Это затмение для ядра последней версии. Для более ранних версий: hosting.json:

{
  "server.urls": "http://localhost:4444;http://localhost:4445;"
}

Ответ 4

Я знаю, что это старый пост, но для запуска визуальной студии с пустельгой.

просто отредактируйте appsettings.json и добавьте конфигурацию, подобную этому (протестирован с NetCore 2.0 и 2.1)

    "profiles" : {
        "Kestrel": {
          "commandName": "Project",
          "launchBrowser": true,
          "applicationUrl": "http://localhost:6969/"
        }
    }

Ответ 5

У меня была та же проблема, при которой моя конфигурация Kestrel в appsettings.json не подбирается. Из этой статьи о переходе с ядра asp.net 2.0 на 2.1 я обновил код загрузки, чтобы он стал как ниже, и он работал для меня.

    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args)
    {
        return WebHost.CreateDefaultBuilder(args) 
            .UseStartup<Startup>();
    }