我的 local.settings.json 中有这些条目
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "whateverstorageaccountconnectionstring",
"FUNCTIONS_WORKER_RUNTIME": "dotnet"
},
"BusinessUnitMapping": {
"Values": {
"Connections": "CON",
"Products": "PRD",
"Credit & Affordability": "CAA",
"Accounts Receivable": "ARC",
"Identity": "IDT"
}
}
}
我有这段代码来读取启动时的值
services.Configure<BusinessUnitMapping>(options => configuration.GetSection("BusinessUnitMapping").Bind(options));
BusinessUnitMapping 的位置
public class BusinessUnitMapping
{
public Dictionary<string, string> Values { get; set; }
public BusinessUnitMapping()
{
Values = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
}
}
当我在本地运行函数应用程序时,它可以毫无问题地将这些设置读取到 BusinessUnitMapping 中。
Azure 门户中的应用程序设置高级编辑仅允许简单的键值对,如下所示
[
{
"name": "AzureWebJobsDashboard",
"value": "DefaultEndpointsProtocol=Somevalue",
"slotSetting": false
},
{
"name": "AzureWebJobsStorage",
"value": "DefaultEndpointsProtocol=Somevalue",
"slotSetting": false
},
...
]
问题
- 这是在 Azure Function 中存储复杂应用设置的正确方法吗?
- 如何在 Azure 门户中为我已部署的 Function App 配置 BusinessUnitMapping?
-艾伦-
最佳答案
- Is this a correct approach to store the complex app settings in Azure Function?
这仍然是一个悬而未决的问题:请参阅 this github issue asking exactly this
- How do I get BusinessUnitMapping configured in Azure Portal for the Function App that I have deployed?
我目前的首选方法是使用 options pattern使用使用 GetEnvironmentVariable 的委托(delegate),该委托(delegate)可以在本地和 Azure 中工作。缺点是您无法在本地设置文件本身中创建复杂类型,但您的对象可以像您喜欢的那样复杂。
一个简单的例子:
在 local.settings.json 中:
{
...
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
...
"SomeSection:Setting1": "abc",
"SomeSection:Setting2": "xyz",
},
...
}
在您的启动中:
services.Configure<MySettingsPoco>(o =>
{
o.Setting1 = Environment.GetEnvironmentVariable("SomeSection:Setting1");
o.Setting2 = Environment.GetEnvironmentVariable("SomeSection:Setting2");
});
然后在 Azure 中,您可以按如下方式创建这些设置:
关于c# - Azure Function 中的复杂对象应用设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57797225/