Vic*_*rra 6 .net-core asp.net-core asp.net-core-2.0
我挣扎了一下与如何appsettings.Development.json 重写或以其他方式合并与appsettings.json。我不确定如何使用 appsettings.Development.json 文件从 appsettings.json 中“清除”节点。
作为参考,我使用的是默认构建器,如下所示 https://github.com/aspnet/MetaPackages/blob/rel/2.0.0-preview1/src/Microsoft.AspNetCore/WebHost.cs#L159-L160
{
"Policy": {
"roles": [
{
"name": "inventoryAdmin",
"subjects": [ "bob", "alice" ],
"identityRoles": [ "ActiveDirectory-Role-Manager" ]
},
]
}
}
Run Code Online (Sandbox Code Playgroud)
鉴于该示例,为什么我不能在以下内容中执行以下操作:
{ "Policy": { "Roles": [] } }
Run Code Online (Sandbox Code Playgroud)
或者
{ "Policy": { "Roles": null } }
Run Code Online (Sandbox Code Playgroud)
当我通过类似的方式检查输出时,Configuration.Get<PolicyServer.Local.Policy>().Roles我仍然得到 3 个角色。
这个问题有望指导我如何覆盖节点而不仅仅是清除它。所以我希望从简单开始,然后按照自己的方式工作。
进入您的IConfiguration实例的所有设置都只是键值对。以下面的简化示例 JSON:
{
"Roles": [
{ "Name": "Role1", "Subjects": [ "Alice", "Bob" ] },
{ "Name": "Role2", "Subjects": [ "Charlie" ] }
]
}
Run Code Online (Sandbox Code Playgroud)
虽然这本质上是一个树结构,但它在添加到您的IConfiguration实例时映射到以下键值对(这里有一些额外的空值,但它们不属于本讨论的一部分):
Roles = Roles:0:Name = Role1Roles:0:Subjects:0 = AliceRoles:0:Subjects:1 = BobRoles:1:Name = Role2Roles:1:Subjects:0 = Charlie您可以看到这模仿了 JSON 的层次结构,其中名称是对象属性,数字是数组的索引。第一个很重要:有一个键Roles没有值,因为值只能是简单的字符串,并且它本身只是一个父级。
现在,当您将额外的 JSON 文件添加到IConfiguration实例设置时,它会映射到一组新的键值对,这些键值对应用于现有的键值对之上。采用以下额外的 JSON:
{
"Roles": []
}
Run Code Online (Sandbox Code Playgroud)
这只是覆盖现有的Roles键并将其设置为它已经拥有的相同值:nothing。如果您null在 JSON 文件中使用,这同样适用- 这就是这些东西的工作原理。
就这里的解决方案而言,我建议您看看您是否可以修改您的appsettings.json方法。例如,您可以将角色配置本身放入例如一个appsettings.Production.json文件中,并将默认版本留空,这样它就不会存在于您的开发环境中。换句话说,尝试将不同的appsettings.json文件建模为可添加的。
| 归档时间: |
|
| 查看次数: |
970 次 |
| 最近记录: |