What's the point of hosting.json since appsett

2019-02-14 12:30发布

In .NET Core 2 Web API app, I could override configuration urls using appsettings.json, but in the official docs they introduced extra file "hosting.json", Why? What's the point of adding complexity?

Below code is fully working using 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 content:

{
  "Logging": {
    "IncludeScopes": false,
    "Debug": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "Console": {
      "LogLevel": {
        "Default": "Warning"
      }
    }
  },
  "urls": "http://*:5005/"
}

Side note: Commenting .SetBasePath(Directory.GetCurrentDirectory()) will keep VS 2017 debug mode operational (means apply launchSettings.json, and auto launch url) otherwise it won't. I guess its related to the CreateDefaultBuilder implementation.

1条回答
smile是对你的礼貌
2楼-- · 2019-02-14 12:53

I think, hosting.json is a configuration file used specifically for asp.net core application hosting. (if you know more about hosting)

WebHostBuilder directly maps its keys with the hosting.json file and it doesn't have the capability to load the config section as we do in normal configuration settings.

According to link attached in your post

Use Configuration to configure the host. In the following example, host configuration is optionally specified in a hosting.json file. Any configuration loaded from the hosting.json file may be overridden by command-line arguments.

If only we explicitly us hosting.json then the WebHostBuilder configurations can be modified using dotnet command.

for example

dotnet run --urls "http://*:8080"

this will override the urls from hostings.json file.

Hopefully, this may give some idea.

PC: hosting.json can be renamed like myappsettings.json it can have configuration and Web Host Builder configuration.

查看更多
登录 后发表回答