asp.net 核心 2 网络 api 从 appsettings 设置托管 url

asp.net core 2 web api set hosting url from appsettings

在 asp.net 核心 2 网络 api 上,我希望能够设置 url 我的 api 将在其上收听(api 运行 作为 windows 服务)基于 appsettings.json 文件中的值。我找不到实现它的方法,我怎样才能访问 IConfiguration 的实例?

var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
var pathToContentRoot = Path.GetDirectoryName(pathToExe);

return WebHost.CreateDefaultBuilder(args)
    .UseContentRoot(pathToContentRoot)
    .UseStartup<Startup>()
    .UseUrls({value_from_appsettings})
    .Build()
    .RunAsService();

为了在进入之前访问配置WebHost.CreateDefaultBuilder,您需要构建自己的IConfiguration实例,使用ConfigurationBuilder.

以您的问题为例,您可以使用如下内容:

var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
var pathToContentRoot = Path.GetDirectoryName(pathToExe);

var appSettingsConfiguration = new ConfigurationBuilder()
    .SetBasePath(pathToContentRoot)
    .AddJsonFile("appsettings.json")
    .Build();

return WebHost.CreateDefaultBuilder(args)
    .UseContentRoot(pathToContentRoot)
    .UseStartup<Startup>()
    .UseUrls(appSettingsConfiguration["Your:Value"])
    .Build()
    .RunAsService();

这在 docs 中有所解释,示例使用 hosting.json 文件来设置它。它还使用 UseConfiguration,它允许您指定一个值,例如urls,自动拾取