config.GetSection 在 Azure Functions 中不起作用吗?推荐的替代方案是什么?

Does config.GetSection not work in Azure Functions? And what is the recommended alternative?

具有复杂(对象列表)配置类型的 Azure 函数在本地工作(在 local.settings.json 中使用该复杂类型)但无法在 Azure 中读取/创建对象列表(在 Azure 中使用该复杂类型)功能配置设置)。我正在寻找推荐的/最佳的方式来支持跨平台/访问方法。


这在我的 local.settings.json 中非常有效,我在其中使用配置生成器并像

一样提取数据
var myList = config.GetSection("ConfigurationList").Get<List<MyType>>();

但这似乎在 Azure Functions 中不起作用??现在我认为这是因为在 local.settings.json 中它是一个 json 文件并且看起来像

"ConfigurationList" : [ { "Name": "A", "Value": 2 }, { "Name": "B", "Value": 3 }]

而在 Azure Functions 中,它是一个值为

的设置“ConfigurationList”
[ { "Name": "A", "Value": 2 }, { "Name": "B", "Value": 3 }]

(所以 Azure Functions 中并没有真正的“部分”?)

似乎“简单”的解决方案是将 .json 更改为带引号的字符串并反序列化该字符串(然后它在两个地方的工作方式相同);但这似乎不是“最佳”(或“推荐”解决方案) 即类似

"ConfigurationList" : "[ { \"Name\": \"A\", \"Value\": 2 }, { \"Name\": \"B\", \"Value\": 3 }]"
var myList = (List<MyType>)JsonConvert.DeserializeObject(config["ConfigurationList"], typeof(List<MyType>));

这还不是最糟糕的;但是 json 有点“不太好”并且不会在两个平台上“流动”……如果这是我必须做的,那很好;但希望有更标准的方法/建议

不确定您是否正在寻找类似的东西,它看起来像是一个列表,但如果它是一个简单的 JObject,例如

“配置列表”:{ "姓名": "A", “价值”:2 }

然后可以在函数app

的配置设置中声明ConfigurationList:Name,ConfigurationList:Value

正如我在评论中提到的,在本地您可以将 local.settings.json 作为 json 文件处理,但是在 azure 上,配置设置中的值是环境变量。没有部分,只有字符串。

请注意,只允许使用字符串值,任何嵌套的值都会被破坏。了解如何在azure web app上使用nest settings(azure functon是基于azure app service sandbox,所以是一样的。):

https://docs.microsoft.com/en-us/archive/blogs/waws/asp-net-core-settings-for-azure-app-service

例如,如果这是 json 结构:

{
  "Parent": {
    "ChildOne": "C1 from secrets.json",
    "ChildTwo": "C2 from secrets.json"
  }
}

然后在网络应用中,你应该这样保存: