如何在Azure函数中设置local.settings.json文件中的数组值

c9qzyr3d  于 2023-08-07  发布在  其他
关注(0)|答案(7)|浏览(144)

当我尝试插入一个数组作为local.settings.json文件中的一个值时:

  1. {
  2. "IsEncrypted": false,
  3. "Values": {
  4. "AzureWebJobsStorage": "",
  5. "AzureWebJobsDashboard": "",
  6. "myArray": [
  7. {
  8. "key1": "value1",
  9. "key2": "value2"
  10. },
  11. {
  12. "key1": "value3",
  13. "key2": "value4"
  14. }
  15. ]
  16. },
  17. "ConnectionStrings": {
  18. "SQLConnectionString": "myConnectionString"
  19. }
  20. }

字符串
我开始得到例外。local.settings.json文件中可以使用数组吗?如果可以,正确的格式是什么?

pw9qyyiw

pw9qyyiw1#

需要使用数组索引器格式。
例如:

  1. "myArray:[0]:key1": "value1",
  2. "myArray:[0]:key2": "value2",
  3. "myArray:[1]:key1": "value3",
  4. "myArray:[1]:key2": "value4"

字符串

gab6jxml

gab6jxml2#

这现在是可能的!
我的本地设置文件如下所示:

  1. {
  2. "IsEncrypted": false,
  3. "Values": {
  4. "AzureWebJobsStorage": "UseDevelopmentStorage=true"
  5. },
  6. "CustomArray": [
  7. {
  8. "CustomProp1": "foo0",
  9. "CustomProp2": "bar0"
  10. },
  11. {
  12. "CustomProp1": "foo1",
  13. "CustomProp2": "bar1"
  14. }
  15. ]
  16. }

字符串
部署到Azure时,我的配置看起来像这样:x1c 0d1x的数据
然后,为了在我的启动中解析数组,我有这样的东西:

  1. var settings = new List<CustomSetting>();
  2. config.GetSection("CustomArray").Bind(settings);


...其中CustomSetting是这样的类:

  1. public class CustomSetting
  2. {
  3. public string CustomProp1 { get; set; }
  4. public string CustomProp2 { get; set; }
  5. }


我正在使用Microsoft.Extensions.Configuration Nuget包的3.1.5版本和Microsoft.NET.Sdk.Functions Azure Functions SDK的3.0.7版本。

展开查看全部
mwg9r5ms

mwg9r5ms3#

如果您尝试在local.settings.json文件/环境变量中设置数组,则可以指定以下格式:

  1. {
  2. "IsEncrypted": false,
  3. "Values": {
  4. "AzureWebJobsStorage": "UseDevelopmentStorage=true",
  5. "FUNCTIONS_WORKER_RUNTIME": "dotnet",
  6. "MyArray:0:Name": "Test",
  7. "MyArray:1:Name": "Test2",
  8. "MyArray:2:Name": "Test3"
  9. }
  10. }

字符串
在Startup.cs中,可以使用以下语法绑定数组

  1. var settings = new List<MyArrayType>();
  2. configuration.GetSection("MyArray").Bind(settings);


这是一个使用.NET 6.0和Azure Functions v4的示例

展开查看全部
93ze6v8z

93ze6v8z4#

在local.settings.json文件中添加类似数组的字符串:

  1. "myArray": "[
  2. {
  3. \"key1\": \"value1\",
  4. \"key2\": \"value2\"
  5. },
  6. {
  7. \"key1\": \"value3\",
  8. \"key2\": \"value4\"
  9. }
  10. ]"

字符串
然后在代码中反序列化它,如下所示:

  1. string value = Environment.GetEnvironmentVariable("myArray");
  2. objList = JsonConvert.DeserializeObject<List<object>>(value);

展开查看全部
bfnvny8b

bfnvny8b5#

可以在local.settings.json文件中使用数组吗?如果可以,正确的格式是什么?
local.settings.json目前似乎不支持arrarys
据我所知,Values集合应该是一个Dictionary,如果其中包含任何非字符串值,将导致Azure函数无法从local.settings.json读取值
根据我的测试,如果它包含它将返回null

  1. "myArray": [
  2. {
  3. "key1": "value1",
  4. "key2": "value2"
  5. },
  6. {
  7. "key1": "value3",
  8. "key2": "value4"
  9. }
  10. ]

字符串


的数据

展开查看全部
slmsl1lt

slmsl1lt6#

我找到了一个解决方案,但不会使其复杂化,您可以简单地创建一个数组,如下所示,它在Azure Functions中的local.settings.json文件中完美工作-

  1. "myArray": "[\"Value1\",\"Value2\"]"

字符串

wlsrxk51

wlsrxk517#

对于简单数组,这里已经有了一些很好的答案,但是我想添加一些与复杂对象相关的细节,以防有人遇到需要一个包含嵌套对象的数组的“完整示例”。简而言之,数组可以像下面这样引用。下面是一个包含简单字符串“Name”属性的2个租约的数组。此外,数组索引似乎可以使用或不使用方括号。我添加方括号是因为它更清楚地表明这是一个数组项。

  1. "Values": {
  2. "Leases:[0]:Name": "Lease1",
  3. "Leases:[1]:Name": "Lease2"
  4. }

字符串
但在我的例子中,我也有复杂的嵌套配置对象,而不仅仅是简单的原语。这方面的约定是在对象和它的属性之间加双下划线,它们可以嵌套多个层次。例如,我有一个Lease对象数组,每个对象都有一个复杂的RateLimit属性,而RateLimit属性又有一个复杂的FixedWindow属性,如下所示:

  1. public class LeaseOptions
  2. {
  3. public string? Name { get; init; }
  4. public RateLimitOptions? RateLimit { get; init; }
  5. }
  6. public class RateLimitOptions
  7. {
  8. public int PermitLimit { get; init; } = 10;
  9. public FixedWindowOptions? FixedWindow { get; init; }
  10. }
  11. public class FixedWindowOptions
  12. {
  13. public int PermitLimit { get; init; }
  14. public TimeSpan Window { get; init; }
  15. }


我的配置看起来像这样:

  1. "Values": {
  2. "Leases:[0]:Name": "Lease1",
  3. "Leases:[0]:RateLimit__PermitLimit": 10,
  4. "Leases:[0]:RateLimit__FixedWindow__PermitLimit": 500,
  5. "Leases:[0]:RateLimit__FixedWindow__Window": "0:0:1:0",
  6. "Leases:[1]:Name": "Lease2",
  7. "Leases:[1]:RateLimit__PermitLimit": 1
  8. "Leases:[1]:RateLimit__FixedWindow__PermitLimit": 100,
  9. "Leases:[2]:RateLimit__FixedWindow__Window": "0:0:5:0"
  10. }


加载配置就像从config中绑定一个基本列表一样简单:

  1. var leaseOptions = new List<LeaseOptions>();
  2. configuration.GetSection("Leases").Bind(leaseOptions);

展开查看全部

相关问题