как читать UrlPrefixes из настроек приложения в program.cs - asp. net core 3.1 - PullRequest
0 голосов
/ 19 апреля 2020
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 config,

"HttpSysOptions": {
    "UrlPrefix": "http://localhost:8099/"
}

Похоже, я могу использовать hostingContext.Configuration, но он не будет доступен в UseHttpSys, как это сделать? Спасибо!

Ответы [ 2 ]

2 голосов
/ 19 апреля 2020

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();
1 голос
/ 19 апреля 2020

Это должно работать:

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();
    }
}
...