WebHost从appsettings.json读取哪些值

时间:2018-08-25 21:23:39

标签: asp.net-core .net-core self-hosting

在.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()的所有可能值。

1 个答案:

答案 0 :(得分:4)

为什么CreateDefaultBuilder不使用appsettings.json值配置主机?

答案的一部分是区分主机和应用程序配置。 The documentationCreateDefaultBuilder ...

  
      
  • 从以下位置加载主机配置:      
        
    • 以ASPNETCORE_为前缀的环境变量...
    •   
    • 命令行参数。
    •   
  •   
  • 从以下位置加载 app 配置:      
        
    • appsettings.json。
    •   
    • appsettings。{Environment} .json。
    •   
  •   

CreateDefaultBuilder内部,appsettings.json不会自动影响主机的原因是这些设置正在配置应用程序,而应用程序配置并不影响主机配置。文档指出,当它说:

  

IWebHostBuilder配置已添加到应用程序的配置中,但事实并非如此-ConfigureAppConfiguration不会影响IWebHostBuilder的配置。

查看source code,表明CreateDefaultBuilder方法仅将appsettings.json值从其对ConfigureAppConfiguration的调用中添加。这就是为什么这些值不会自动影响主机的原因。

如何使用* .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"