how to read UrlPrefixes from appsettings in program.cs - asp.net core 3.1

889 Views Asked by At
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/"
}

Looks like I can use hostingContext.Configuration, but it won't available within UseHttpSys, how to do this? Thanks!

2

There are 2 best solutions below

0
On BEST ANSWER

IWebHostBuilder.UseHttpSys(Action) consists of two parts: Registering the required services, and configuring the HttpSysOptions. You can split this up by registering only the required services and configuring the options yourself. And when you do that, you can access the hosting context:

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();
3
On

This should work:

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