我们有一个托管在Azure中的.NET核心应用程序。appsettings.json中的一些配置在Azure中的app service / configuration / application settings
下被覆盖。这对于“平面”属性很好,但不适用于数组(平面值),微软在这里明确记录了这一点(也在this answer中引用)。
例如,对于appsettings中的以下部分:
"Config": {
"SomeProperty": "Some string value",
"SomeArray": [
"Apple",
"Banana",
"Orange"
]
}
正确设置Config:SomeProperty = new string
会更改属性,因此环境变量的设置通常是正确的。我想覆盖azure appsettings中的整个数组Config:SomeArray
。以下选项在运行时不会更改数组值的任何内容:
| 关键词|价值|
| - ------|- ------|
| 配置:SomeArray|['NewValue']|
| 配置:SomeArray|[“NewValue”]|
| 配置:SomeArray:0|新值|
最后一个选项来自网络上的多个答案(例如here),其中指出不能覆盖整个数组(子对象),而只能覆盖元素。
是我做错了什么,还是有可能在Azure应用程序设置上更改数组属性?如果没有(或者如果只是元素方面,不知何故),有没有比将其更改为字符串属性并手动解析数组更好的选择(我现在看到的唯一选择,显然是(正确地)dislike的人)?
1条答案
按热度按时间nzk0hqpo1#
正如您提到的,Azure应用服务配置UI不支持覆盖
appsettings.json
中的数组值。但是,您可以通过在Azure配置中使用字符串表示数组,然后在.NET代码中解析它以获取数组来解决此限制。你可以检查下面的方法。
在Azure配置UI中,添加一个新设置,该设置包含键“Config:SomeArray”和表示数组的字符串值,例如“Apple,Banana,橙子”。在.NET代码中,从配置中检索“Config:SomeArray”的值,并将其解析为数组:
这段代码使用Split()方法将字符串拆分为一个字符串数组,并使用逗号作为分隔符,然后使用ToArray()扩展方法将结果转换为字符串数组。
现在可以在代码中使用解析后的数组:
使用环境变量:将数组定义为环境变量,并在代码中检索它。例如,您可以定义一个名为SOME_ARRAY的环境变量,其值为Apple,Banana,橙子。在代码中,您可以检索此环境变量并将其拆分为数组。
使用Azure Key Vault:将阵列存储在Azure Key Vault中,并在代码中检索它。Azure Key Vault允许您存储和管理机密,如密码、密钥和证书。您可以将阵列作为机密存储在Azure Key Vault中,并在代码中检索它。
更新
应用程序设置“MY_ENV_VAR”的值为包含三个条目的列表:“entry1”、“entry2”和“entry3”。如果您的应用程序需要将此值作为列表使用,则需要首先将其解析为列表数据结构。