как читать UrlPrefixes из настроек приложения в program.cs - asp.net core 3.1
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseHttpSys(options =>
{
options.UrlPrefixes.Add("how to get url from appsettings");
});
webBuilder.UseStartup<Startup>();
})
//host as window service
.UseWindowsService();
}
конфиг appsettings,
"HttpSysOptions": {
"UrlPrefix": "http://localhost:8099/"
}
Похоже, я могу использовать hostingContext.Configuration
, но он не будет доступен в UseHttpSys
, как это сделать? Спасибо!
2 ответа
Решение
IWebHostBuilder.UseHttpSys(Action)
состоит из двух частей: регистрации необходимых сервисов и настройки HttpSysOptions
. Вы можете разделить это, зарегистрировав только необходимые службы и настроив параметры самостоятельно. И когда вы это сделаете, вы получите доступ к контексту хостинга:
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseHttpSys();
webBuilder.ConfigureServices((context, services) =>
{
services.Configure<HttpSysOptions>(options =>
{
options.UrlPrefixes.Add(context.Configuration["HttpSysOptions:UrlPrefix"]);
});
});
webBuilder.UseStartup<Startup>();
})
.UseWindowsService();
Это должно работать:
public static IHostBuilder CreateHostBuilder(string[] args)
{
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true)
.Build();
string urlPrefix = configuration.GetSection("HttpSysOptions")["UrlPrefix"];
return Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseHttpSys(options =>
{
options.UrlPrefixes.Add(urlPrefix);
});
webBuilder.UseStartup<Startup>();
})
//host as window service
.UseWindowsService();
}
}