Использование 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>();
}