Override array settings in appsettings.json with those in appsettings.Production.json(用appsettings.Production.json中的数组设置覆盖appsettings.json中的数组设置)
问题描述
我使用的是ASP.NET Core 2.1。我在appsettings.json
中有设置,并使用选项模式将它们绑定到类。我想在appsettings.Production.json
中覆盖其中的一些设置。
根据文档支持覆盖,一般适用于我。 但它不适用于数组。
appsettings.json
:
"MySectionOuter": {
"MySectionInner": [
{
"foo": "1",
"bar": "2",
"baz": "3"
},
{
"foo": "a",
"bar": "b",
"baz": "c"
}
]
}
我在appsettings.Production.json
中的覆盖
"MySectionOuter": {
"MySectionInner": [
{
"bar": "4",
},
{
"baz": "d"
}
]
}
但是,这不起作用-它是添加而不是替换。
iread that该数组是键值存储的语法糖。所以我也试了一下:
"MySectionOuter": {
"MySection:1": {
"bar": "4",
},
"MySection:2": {
"baz": "b",
}
}
但这也不起作用。
正确的语法是什么?
更新
评论显示我没有正确解释。我要的是这样的:
开发中:
element1: foo=1
element1: bar=2
element1: baz=3
element2: foo=a
element2: bar=b
element2: baz=c
生产中:
element1: foo=1
element1: bar=2
element1: baz=4 // this was changed
element2: foo=a
element2: bar=b
element2: baz=d // this was changed
推荐答案
实际上,在构建配置时没有阵列。它只是一个键-值对词典。所以你最终得到的是字符串键,类似于
"mysectionouter:mysectioninner:0:foo" = 1
。
因此,当您在配置中定义数组时,会发生以下情况:
appsettings.json:
"mysectionouter:mysectioninner:0:foo" = 1
"mysectionouter:mysectioninner:0:bar" = 2
appsettings.Production.json:
"mysectionouter:mysectioninner:0:bar" = new1
结果:
foo = 1
bar = new1
所以它只是基于索引,而Next配置只是覆盖键。在您的第二个示例中,您除了更改索引之外什么也没有实现。表示形式为:
"mysectionouter:mysectioninner:1:bar" = new1
回到您的问题:数组在应用程序设置中很复杂,虽然受支持,但通常很难使用,而且不直观。
通过索引,您可能会得到两个不相关对象的奇怪合并,如果您在文件中定义了不同的设置集,如第一个配置中的设置A和B,以及第二个配置中的C,则结果中将得到C和B,而您可能根本不想要B。更糟糕的是,如果您只定义每个对象的一些字段,则可能会得到A和C的混合。
我建议使用其他一些文件来存储此类信息。您还可以进入调试器中加载配置的位置,亲自查看这些键是如何构建的,以获得更深入的了解。
这篇关于用appsettings.Production.json中的数组设置覆盖appsettings.json中的数组设置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:用appsettings.Production.json中的数组设置覆盖appsettings.json中的数组设置
基础教程推荐
- 将 XML 转换为通用列表 2022-01-01
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- 如何激活MC67中的红灯 2022-01-01
- rabbitmq 的 REST API 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- c# Math.Sqrt 实现 2022-01-01