在.Net Core中,您可以使用python main_gui.py build
自行托管Web服务器。有一种称为WebHost
的方法,Microsoft documentation声明如下:
CreateDefaultBuilder()
执行以下任务:
- 从以下位置加载应用程序配置:
- appsettings.json。
但是,似乎没有任何文档可以为CreateDefaultBuilder
放入参数以使appsettings.json
自动获取默认值以外的配置值。
例如,我尝试将以下内容添加到我的WebHost
中,但是服务器以appsettings.json
开头,而不管:
http://localhost:5000
我知道我可以使用{
"Kestrel" : {
"urls" : "http://*:8080"
},
"server" : {
"urls" : "http://*:8080"
}
}
来自己读appsettings.json
,但这违反了文档的目的
那么,我需要放入ConfigurationBuilder
文件中以使appsettings.json
不使用默认值吗?也欢迎列出要放入CreateDefaultBuilder()
的所有可能值。
答案 0 :(得分:4)
答案的一部分是区分主机和应用程序配置。 The documentation说CreateDefaultBuilder
...
- 从以下位置加载主机配置:
- 以ASPNETCORE_为前缀的环境变量...
- 命令行参数。
- 从以下位置加载 app 配置:
- appsettings.json。
- appsettings。{Environment} .json。
在CreateDefaultBuilder
内部,appsettings.json
不会自动影响主机的原因是这些设置正在配置应用程序,而应用程序配置并不影响主机配置。文档指出,当它说:
IWebHostBuilder
配置已添加到应用程序的配置中,但事实并非如此-ConfigureAppConfiguration
不会影响IWebHostBuilder的配置。
查看source code,表明CreateDefaultBuilder
方法仅将appsettings.json
值从其对ConfigureAppConfiguration
的调用中添加。这就是为什么这些值不会自动影响主机的原因。
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
的工作方式鼓励我们将这些设置保持分开。
这是我们可以用来配置主机的list of keys:
"applicationName"
"startupAssembly"
"hostingStartupAssemblies"
"hostingStartupExcludeAssemblies"
"detailedErrors"
"environment"
"webroot"
"captureStartupErrors"
"urls"
"contentRoot"
"preferHostingUrls"
"preventHostingStartup"
"suppressStatusMessages"
"shutdownTimeoutSeconds"