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"
}
}
然后在网络应用中,你应该这样保存:
具有复杂(对象列表)配置类型的 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"
}
}
然后在网络应用中,你应该这样保存: