WebHost 从 appsettings.json 中读取了哪些值
Which values does WebHost read from appsettings.json
在 .Net Core 中,您可以使用 WebHost
自托管 Web 服务器。有一个名为 CreateDefaultBuilder()
的方法,Microsoft documentation 声明如下:
CreateDefaultBuilder
performs the following tasks:
- Loads app configuration from:
- appsettings.json.
但是,似乎没有任何文档说明您可以将哪些参数放入 appsettings.json
以使 WebHost
自动获取默认值以外的配置值。
例如,我尝试将以下内容添加到我的 appsettings.json
,但无论如何服务器都以 http://localhost:5000
启动:
{
"Kestrel" : {
"urls" : "http://*:8080"
},
"server" : {
"urls" : "http://*:8080"
}
}
我知道我可以使用 ConfigurationBuilder
自己阅读 appsettings.json
,但这有点违背了文档的目的
那么,我需要在我的 appsettings.json
文件中输入什么才能让 CreateDefaultBuilder()
不使用默认值?也欢迎列出要放入 appsettings.json
的所有可能值。
为什么 CreateDefaultBuilder 不使用 appsettings.json 值配置主机?
部分答案是区分主机和应用配置。 The documentation 表示 CreateDefaultBuilder
...
- Loads host configuration from:
- Environment variables prefixed with ASPNETCORE_ ...
- Command-line arguments.
- Loads app configuration from:
- appsettings.json.
- appsettings.{Environment}.json.
在 CreateDefaultBuilder
中,appsettings.json
不会自动影响主机的原因是这些设置正在配置应用程序,而应用程序配置不会影响主机配置。文档表明,当它说:
IWebHostBuilder
configuration is added to the app's configuration, but the converse isn't true — ConfigureAppConfiguration
doesn't affect the IWebHostBuilder configuration.
查看 source code 表明 CreateDefaultBuilder
方法仅从其对 ConfigureAppConfiguration
的调用中添加 appsettings.json
值。这就是为什么这些值不会自动影响主机的原因。
我们如何使用 *.json 文件中的值配置主机?
CreateDefaultBuilder
不会使用 *.json
文件自动配置主机。我们需要手动执行此操作,并且 the documentation specifies how。在该示例中,该文件名为 hostsettings.json
,该示例将其显式添加如下:
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("hostsettings.json")
.Build();
return WebHost.CreateDefaultBuilder(args)
// this impacts *both* host and app config
.UseConfiguration(config)
.UseStartup<Startup>();
这个名字没有魔法 hostsettings.json
。事实上,我们可以将主机设置和应用程序设置合并到一个名为 appsettings.json
的文件中。 CreateDefaultBuilder
的工作方式鼓励我们将这些设置分开。
我们可以在 *.json 文件中放入哪些密钥来配置主机?
这是我们可以用来配置主机的list of keys:
"applicationName"
"startupAssembly"
"hostingStartupAssemblies"
"hostingStartupExcludeAssemblies"
"detailedErrors"
"environment"
"webroot"
"captureStartupErrors"
"urls"
"contentRoot"
"preferHostingUrls"
"preventHostingStartup"
"suppressStatusMessages"
"shutdownTimeoutSeconds"
在 .Net Core 中,您可以使用 WebHost
自托管 Web 服务器。有一个名为 CreateDefaultBuilder()
的方法,Microsoft documentation 声明如下:
CreateDefaultBuilder
performs the following tasks:
- Loads app configuration from:
- appsettings.json.
但是,似乎没有任何文档说明您可以将哪些参数放入 appsettings.json
以使 WebHost
自动获取默认值以外的配置值。
例如,我尝试将以下内容添加到我的 appsettings.json
,但无论如何服务器都以 http://localhost:5000
启动:
{
"Kestrel" : {
"urls" : "http://*:8080"
},
"server" : {
"urls" : "http://*:8080"
}
}
我知道我可以使用 ConfigurationBuilder
自己阅读 appsettings.json
,但这有点违背了文档的目的
那么,我需要在我的 appsettings.json
文件中输入什么才能让 CreateDefaultBuilder()
不使用默认值?也欢迎列出要放入 appsettings.json
的所有可能值。
为什么 CreateDefaultBuilder 不使用 appsettings.json 值配置主机?
部分答案是区分主机和应用配置。 The documentation 表示 CreateDefaultBuilder
...
- Loads host configuration from:
- Environment variables prefixed with ASPNETCORE_ ...
- Command-line arguments.
- Loads app configuration from:
- appsettings.json.
- appsettings.{Environment}.json.
在 CreateDefaultBuilder
中,appsettings.json
不会自动影响主机的原因是这些设置正在配置应用程序,而应用程序配置不会影响主机配置。文档表明,当它说:
IWebHostBuilder
configuration is added to the app's configuration, but the converse isn't true —ConfigureAppConfiguration
doesn't affect the IWebHostBuilder configuration.
查看 source code 表明 CreateDefaultBuilder
方法仅从其对 ConfigureAppConfiguration
的调用中添加 appsettings.json
值。这就是为什么这些值不会自动影响主机的原因。
我们如何使用 *.json 文件中的值配置主机?
CreateDefaultBuilder
不会使用 *.json
文件自动配置主机。我们需要手动执行此操作,并且 the documentation specifies how。在该示例中,该文件名为 hostsettings.json
,该示例将其显式添加如下:
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("hostsettings.json")
.Build();
return WebHost.CreateDefaultBuilder(args)
// this impacts *both* host and app config
.UseConfiguration(config)
.UseStartup<Startup>();
这个名字没有魔法 hostsettings.json
。事实上,我们可以将主机设置和应用程序设置合并到一个名为 appsettings.json
的文件中。 CreateDefaultBuilder
的工作方式鼓励我们将这些设置分开。
我们可以在 *.json 文件中放入哪些密钥来配置主机?
这是我们可以用来配置主机的list of keys:
"applicationName"
"startupAssembly"
"hostingStartupAssemblies"
"hostingStartupExcludeAssemblies"
"detailedErrors"
"environment"
"webroot"
"captureStartupErrors"
"urls"
"contentRoot"
"preferHostingUrls"
"preventHostingStartup"
"suppressStatusMessages"
"shutdownTimeoutSeconds"