【问题标题】:How do I delete a node in appsettings.json using appsettings.Development.json?如何使用 appsettings.Development.json 删除 appsettings.json 中的节点?
【发布时间】:2018-10-18 18:38:05
【问题描述】:

我对@9​​87654322@ 覆盖 或以其他方式合并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 个角色。

这个问题有望指导我如何覆盖节点而不仅仅是清除它。所以我希望从简单的开始,然后按我的方式工作。

【问题讨论】:

    标签: asp.net-core .net-core asp.net-core-2.0


    【解决方案1】:

    进入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。如果您在 JSON 文件中使用 null,这同样适用 - 这就是这些东西的工作原理。

    就这里的解决方案而言,我建议您看看您是否可以修改您的appsettings.json 方法。例如,您可以将角色配置本身放入例如appsettings.Production.json 文件并将默认版本保留为空白,以便它在您的开发环境中不存在。换句话说,尝试对不同的appsettings.json 文件进行建模,使其自身具有附加性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-15
      • 2017-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多