在 .NET Core 2 Web API 应用程序中,我可以使用
urls
覆盖配置 appsettings.json
,但是在 official docs 他们引入了额外的文件“hosting.json”,为什么?增加复杂性有什么意义?
下面的代码完全可以使用
appsettings.json
:
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory()) //see Side note below
.AddJsonFile("appsettings.json", optional: true)
.AddCommandLine(args)
.Build();
return WebHost.CreateDefaultBuilder(args)
.UseConfiguration(config)
.UseStartup<Startup>()
.Build();
}
}
appsettings.json 内容:
{
"Logging": {
"IncludeScopes": false,
"Debug": {
"LogLevel": {
"Default": "Warning"
}
},
"Console": {
"LogLevel": {
"Default": "Warning"
}
}
},
"urls": "http://*:5005/"
}
旁注: 评论
.SetBasePath(Directory.GetCurrentDirectory())
将使 VS 2017 调试模式保持运行(意味着应用 launchSettings.json
,和自动启动 url)否则它不会。我猜它与 CreateDefaultBuilder 实现有关。
我认为,这只是用于分离主机和应用程序配置以遵循SRP(单一职责原则)的约定。 您可以将它们保存在同一个文件中,如果需要,可以用注释分隔
我觉得,hosting.json是一个专门用于asp.net core应用程序托管的配置文件。 (如果您对托管了解更多)
WebHostBuilder 直接将其密钥映射到 hosting.json 文件,并且它无法像我们在正常配置设置中那样加载 config 部分。
根据您帖子中的链接
使用配置来配置主机。在下面的例子中, 主机配置可以选择在 hosting.json 文件中指定。任何 从 hosting.json 文件加载的配置可能会被覆盖 命令行参数。
如果我们只显式使用 hosting.json,那么可以使用 dotnet 命令修改 WebHostBuilder 配置。
例如
dotnet run --urls "http://*:8080"
这将覆盖 hostings.json 文件中的 url。
希望这可以提供一些想法。
PC:hosting.json 可以重命名为 myappsettings.json 它可以 有配置和 Web Host Builder 配置。