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

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

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

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

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

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

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


person Niklas Gislum    schedule 20.07.2017    source источник


Ответы (5)


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

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

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

Чтобы обойти это, вы можете сделать что-то вроде этого в 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();
person marcusturewicz    schedule 12.10.2017
comment
.UseKestrel ((hostingContext, options) = ›{var env = hostingContext.HostingEnvironment;} Чище, чем: var env = Environment.GetEnvironmentVariable (ASPNETCORE_ENVIRONMENT); - person NetProvoke; 09.04.2018
comment
Это станет избыточным, когда будет выпущена версия 2.1, поскольку поддержка для Kestrel через конфигурацию вернется, а HTTPS в разработке будет включен по умолчанию blogs.msdn.microsoft.com/webdev/2018/02/02/. - person marcusturewicz; 11.04.2018

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

Рабочий 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)
person Konstantin    schedule 29.08.2018

Я использую файлы 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;"
}

Это пример ядра dotnet последней версии.

Для более ранних версий:

hosting.json:

{
    "server.urls": "http://localhost:4444;http://localhost:4445;"
}
person Алексей Сидоров    schedule 28.07.2017
comment
Это похоже на то, как я настроил Kestrel в ядре 1.1, и я могу сделать это таким образом, но я прочитал несколько мест, где в будущем это должно быть сделано с помощью раздела Kestrel в appsettings.json. codingblast.com/asp-net-core-2-preview - person Niklas Gislum; 29.07.2017
comment
Я видел это видео, и оно выглядело таким простым. Я пробовал себя использовать тот же метод, и у меня тоже не получается заставить его работать. Кому-нибудь еще повезло с этим? - person sshirley; 29.08.2017
comment
У меня тоже проблема с asp.net core 2.0. Ничего из того, что я помещаю в appsettings.json, не используется. Я не понимаю этого, потому что appsettings должен быть прочитан по умолчанию в новом ядре asp.net с построителем конфигурации по умолчанию. - person marcusturewicz; 25.09.2017
comment
@ tura08, можно использовать appsettings.json, см. здесь: stackoverflow.com/questions/46696115/ - person Jawad Al Shaikh; 11.10.2017

Чтобы запустить Visual Studio с Kestrel, просто отредактируйте appsettings.json и добавьте такую ​​конфигурацию (проверено с NetCore 2.0 и 2.1):

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

У меня была такая же проблема, из-за которой моя конфигурация Kestrel в appsettings.json не подбиралась. Из эта статья о переходе с asp.net core 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>();
}
person peter    schedule 14.08.2018