asp.net-core - 如何使用 appsettings.Development.json 删除 appsettings.json 中的节点?
问题描述
我在如何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
应用设置.json
{
"Policy": {
"roles": [
{
"name": "inventoryAdmin",
"subjects": [ "bob", "alice" ],
"identityRoles": [ "ActiveDirectory-Role-Manager" ]
},
]
}
}
鉴于该示例,为什么我不能在我的中执行以下操作:
appsettings.Development.Json:
{ "Policy": { "Roles": [] } }
或者
{ "Policy": { "Roles": null } }
当我通过类似的方式检查输出时,Configuration.Get<PolicyServer.Local.Policy>().Roles
我仍然得到 3 个角色。
这个问题有望指导我如何覆盖节点而不仅仅是清除它。所以我希望从简单的开始并在那里工作。
解决方案
进入您的IConfiguration
实例的所有设置都只是键值对。采用以下简化的 JSON 示例:
{
"Roles": [
{ "Name": "Role1", "Subjects": [ "Alice", "Bob" ] },
{ "Name": "Role2", "Subjects": [ "Charlie" ] }
]
}
虽然这本质上是一个树结构,但当添加到您的实例时,它会映射到以下键值对IConfiguration
(这里还有一些额外的空值,但它们不属于本次讨论的一部分):
Roles
=Roles:0:Name
=Role1
Roles:0:Subjects:0
=Alice
Roles:0:Subjects:1
=Bob
Roles:1:Name
=Role2
Roles:1:Subjects:0
=Charlie
您可以看到这模仿了 JSON 的层次结构,其中名称是对象属性,数字是数组的索引。第一个很重要:有一个Roles
没有值的键,因为值只能是简单的字符串,它本身只是一个父级。
现在,当您向实例设置添加一个额外的 JSON 文件时IConfiguration
,它会映射到一组新的键值对,这些键值对被应用到现有的那些之上。采用以下附加 JSON:
{
"Roles": []
}
这只是覆盖现有Roles
键并将其设置为它已经具有的相同值:nothing。如果您null
在 JSON 文件中使用,这同样适用 - 这就是这些东西的工作原理。
就这里的解决方案而言,我建议你看看你是否可以重新设计你的appsettings.json
方法。例如,您可以将角色配置本身放入一个appsettings.Production.json
文件中,并将默认版本留空,这样它就不会存在于您的开发环境中。换句话说,尝试对不同的appsettings.json
文件进行建模,使其本身具有附加性。
推荐阅读
- python - 如何以一致的方式从左到右和从上到下对轮廓进行排序
- mysql - ERROR 2006 (HY000): MySQL server has gone away - 尽管对配置文件进行了更改
- docker - Docker Compose(Docker) 中未设置目录权限
- c++ - C++ winapi VirtualQueryEx 函数给了我“000000”
- asp.net-core - 如何从 ASP.Net Core 中的查询字符串构造非默认构造函数模型?
- linux - 如何在两个 VM Linux 之间同步两个文件夹?
- java - 使用 AsyncTask 根据值定义文本颜色
- buffer - 以椭圆形将 SpatialPoints 扩展到 SpatialPolygon
- angular - 从材料日期选择器中提取和分解日期
- c# - 填充 ComboBox(3 层架构)