【发布时间】:2018-01-26 02:44:07
【问题描述】:
我正在尝试了解 .NET Core 2 中的配置源。我有一些秘密配置,在我的开发环境中存储在项目 secrets.json 中。因为我不希望这些秘密存在于存储库中,所以在生产中我想从环境变量中加载它们。我的理解是ConfigurationBuilder 可以让我交替使用配置源,但它们的加载方式不同。
我的secrets.json 文件看起来有点像这样:
{
"MyApi" : {
"APIKEY": "12341234123412341234",
"TemplateIds": {
"MyTemplate": "abcdabcdabcdabcdabcdabcd"
}
}
}
这会加载builder.GetSection("MyApi").AsEnumerable(),作为包含以下项目的列表:
{[MyApi, ]}
{[MyApi:APIKEY, "12341234123412341234"]}
{[MyApi:TemplateIds, ]}
{[MyApi:TemplateIds:MyTemplate, "abcdabcdabcdabcdabcdabcd"]}
但是,当我将名为 MyApi 的环境变量设置为 {"APIKEY": "12341234123412341234", "TemplateIds": {"MyTemplate": "abcdabcdabcdabcdabcdabcd"} 时,使用 builder.GetSection("MyApi").AsEnumerable() 加载它只会产生一个值,设置为整个 JSON 字符串。
我的配置生成器如下所示:
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("secrets/appsettings.secrets.json", optional: true)
.AddEnvironmentVariables();
那么,这两种加载配置的方法是否应该给出相同的结果,如果是,有谁知道为什么在这种情况下它们可能会有所不同?
【问题讨论】:
-
好问题!我也觉得很混乱。人们一直在阅读有关配置链的信息,这使您相信这些值只是被覆盖了 appsettings->appsettings.dev-> 环境变量。但是由于您没有统一访问它们,我会说这并不正确
标签: asp.net-core configuration .net-core environment-variables