我使用local.settings.json文件存储我的Azure功能的应用程序设置,如建议的Loaders Android Performance。我可以在以下示例中访问应用程序设置的值
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "",
"AzureWebJobsDashboard": ""
},
"ConnectionStrings": {
"SQLConnectionString": "myConnectionString"
}
}
使用ConfigurationManager.ApplicationSettings["someValue"]
或使用ConfigurationManager.ConnectionStrings["SQLConnectionString"]
的连接字符串。
但是,当我尝试将数组作为值之一插入时:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "",
"AzureWebJobsDashboard": "",
"myArray": [
{
"key1": "value1",
"key2": "value2"
},
{
"key1": "value3",
"key2": "value4"
}
]
},
"ConnectionStrings": {
"SQLConnectionString": "myConnectionString"
}
}
我开始获得异常(例如,当我尝试访问连接字符串时)。所以我的猜测是我没有使用正确的阵列格式。 可以在local.settings.json文件中使用数组吗?如果他们可以,那么正确的格式是什么?
答案 0 :(得分:0)
根据azure函数源代码Azure.Functions.Cli/Common/SecretsManager.cs,你会发现它有一个AppSettingsFile类,用于从local.settings.json文件中读取设置。
AppSettingsFile类的某些部分:
null
根据代码,它使用JsonConvert.DeserializeObject方法将json文件转换为appSettings对象。
但appSettings.Values属性是目录类型,它不支持数组。所以我不建议您使用数组作为其设置。
我建议你可以尝试将数组转换为两个字符串值。这样做会很好。
像这样:
public AppSettingsFile(string filePath)
{
_filePath = filePath;
try
{
var content = FileSystemHelpers.ReadAllTextFromFile(_filePath);
var appSettings = JsonConvert.DeserializeObject<AppSettingsFile>(content);
IsEncrypted = appSettings.IsEncrypted;
Values = appSettings.Values;
ConnectionStrings = appSettings.ConnectionStrings;
Host = appSettings.Host;
}
catch
{
Values = new Dictionary<string, string>();
ConnectionStrings = new Dictionary<string, string>();
IsEncrypted = true;
}
}
public bool IsEncrypted { get; set; }
public Dictionary<string, string> Values { get; set; } = new Dictionary<string, string>();
public Dictionary<string, string> ConnectionStrings { get; set; } = new Dictionary<string, string>();