gpt4 book ai didi

asp.net-core - 如何使用 appsettings.Development.json 删除 appsettings.json 中的节点?

转载 作者:行者123 更新时间:2023-12-03 16:24:23 27 4
gpt4 key购买 nike

我在 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

appsettings.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 的层次结构,其中名称是对象属性,数字是数组的索引。第一个很重要:有一个 key Roles它没有值(value),因为值只能是简单的字符串,并且它本身只是一个父级。

    现在,当您向 IConfiguration 添加一个额外的 JSON 文件时实例设置,它映射到一组新的键值对,这些键值对应用在现有键值对之上。采用以下额外的 JSON:

    {
    "Roles": []
    }

    这只是覆盖现有的 Roles键并将其设置为它已经拥有的相同值:没有。如果您使用 null,同样适用在您的 JSON 文件中 - 这就是这些东西的工作原理。

    就这里的解决方案而言,我建议您看看您是否可以重做 appsettings.json方法。例如,您可以将角色配置本身放入例如 appsettings.Production.json文件并将默认版本留空,以便它在您的开发环境中不存在。换句话说,尝试建模您的不同 appsettings.json文件自己添加。

    关于asp.net-core - 如何使用 appsettings.Development.json 删除 appsettings.json 中的节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52880484/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com