因为appsettings.json已经足够了,所以hosting.json有什么意义

问题描述:

在.NET Core 2 Web API应用程序中,我可以使用appsettings.json覆盖配置urls,但是在official docs中他们引入了额外文件“hosting.json”,为什么?增加复杂性的意义何在?因为appsettings.json已经足够了,所以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,并自动启动网址),否则它不会。我猜它与CreateDefaultBuilder实现有关。

我认为,hosting.json是专门用于asp.net核心应用程序托管的配置文件。 (如果您知道更多关于主机的信息)

WebHostBuilder直接将其密钥与hosting.json文件映射,并且它不像我们在正常配置设置中那样加载配置部分

根据附加在您的文章

使用配置配置主机链接。在以下示例中,可以选择在hosting.json文件中指定 主机配置。从hosting.json文件加载的任何 配置可能会被 命令行参数覆盖。

如果我们明确我们hosting.json那么WebHostBuilder配置可以使用DOTNET命令进行修改。

例如

DOTNET运行--urls的 “http:// *:8080”

这将覆盖从hostings.json文件的URL。

希望这可能会给出一些想法。

PC:hosting.json可以改名像myappsettings.json它可以 具有配置和虚拟主机生成器配置。

+0

要从命令行重写hosting.json或任何[name] .json网址,它通过.AddCommandLine(args)完成,在这方面没有什么特别的关于hosting.json。 –

+0

我想重写hosting.json。这就是文档所说的。此外,它有道理hosting.json具有特定的主机配置其他像任何其他行话,如DB配置或日志记录或其他配置的详细信息。 –

+0

这是非常常见的设计,每个应用程序只有一个配置文件。当用户计划部署应用程序时,跳转不同的配置文件以调整或验证配置参数并不好。 –