在 VS 2017 Azure 函数开发中从 local.settings.json 中读取值
Read values from local.settings.json in VS 2017 Azure Function development
我正在 VS 2017 中编写 Azure 函数。我需要设置一些自定义配置参数。我将它们添加到 Values
下的 local.settings.json
中。
{
"IsEncrypted":false,
"Values" : {
"CustomUrl" : "www.google.com",
"Keys": {
"Value1":"1",
"Value2" :"2"
}
}
}
现在,ConfigurationManager.AppSettings["CustomUrl"]
returns 无效。
我正在使用:
- .NET Framework 4.7
- Microsoft.NET.Sdk.Functions 1.0.5
- System.Configuration.ConfigurationManager 4.4.0
- Azure.Functions.Cli 1.0.4
我是不是漏掉了什么?
首先,我创建了一个示例并使用您的 local.settings.json 数据进行测试,正如 Mikhail 和 ahmelsayed 所说,它工作正常。
此外,据我所知,Values
集合应该是一个字典,如果它包含任何非字符串值,它会导致Azure函数无法从local.settings.json中读取值.
我的测试:
ConfigurationManager.AppSettings["CustomUrl"]
returns null 与以下 local.settings.json。
{
"IsEncrypted": false,
"Values": {
"CustomUrl": "www.google.com",
"testkey": {
"name": "kname1",
"value": "kval1"
}
}
}
Environment.GetEnvironmentVariable("key")
我能够使用上面的代码行从 local.settings.json 中读取值。
Azure 函数将二进制文件复制到 bin 文件夹并使用 azure 函数 cli 运行,因此它会搜索 local.settings.json,因此请确保已将 "Copy to Output Directory"
设置为 "Copy Always"
如果您使用的是基于 TimeTrigger 的 Azure 函数,那么您可以从 Azure 函数访问您的密钥(在 local.settings.json 中创建),如下所示。
[FunctionName("BackupTableStorageFunction")]
public static void Run([TimerTrigger("%BackUpTableStorageTriggerTime%")]TimerInfo myTimer, TraceWriter log, CancellationToken cancellationToken)
嘿,您也许可以在调试时读取属性,但是一旦您尝试在 Azure 中部署它,这些属性将不再起作用。 Azure 函数不允许嵌套属性,您必须在 "Values" 选项或 "ConnectionStrings" 中内联使用所有这些属性。
查看此文档作为参考:
https://docs.microsoft.com/en-us/azure/azure-functions/functions-how-to-use-azure-function-app-settings
使用.Net 6
(可能还有一些更早的版本)可以将IConfiguration
注入到函数的构造函数中。
public Function1(IConfiguration configuration)
{
string setting = _configuration.GetValue<string>("MySetting");
}
MySetting
必须在 local.settings.json
的 Values
部分:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
"MySetting": "value"
}
}
它也适用于 Azure Function App 中的应用程序设置。
我正在 VS 2017 中编写 Azure 函数。我需要设置一些自定义配置参数。我将它们添加到 Values
下的 local.settings.json
中。
{
"IsEncrypted":false,
"Values" : {
"CustomUrl" : "www.google.com",
"Keys": {
"Value1":"1",
"Value2" :"2"
}
}
}
现在,ConfigurationManager.AppSettings["CustomUrl"]
returns 无效。
我正在使用:
- .NET Framework 4.7
- Microsoft.NET.Sdk.Functions 1.0.5
- System.Configuration.ConfigurationManager 4.4.0
- Azure.Functions.Cli 1.0.4
我是不是漏掉了什么?
首先,我创建了一个示例并使用您的 local.settings.json 数据进行测试,正如 Mikhail 和 ahmelsayed 所说,它工作正常。
此外,据我所知,Values
集合应该是一个字典,如果它包含任何非字符串值,它会导致Azure函数无法从local.settings.json中读取值.
我的测试:
ConfigurationManager.AppSettings["CustomUrl"]
returns null 与以下 local.settings.json。
{
"IsEncrypted": false,
"Values": {
"CustomUrl": "www.google.com",
"testkey": {
"name": "kname1",
"value": "kval1"
}
}
}
Environment.GetEnvironmentVariable("key")
我能够使用上面的代码行从 local.settings.json 中读取值。
Azure 函数将二进制文件复制到 bin 文件夹并使用 azure 函数 cli 运行,因此它会搜索 local.settings.json,因此请确保已将 "Copy to Output Directory"
设置为 "Copy Always"
如果您使用的是基于 TimeTrigger 的 Azure 函数,那么您可以从 Azure 函数访问您的密钥(在 local.settings.json 中创建),如下所示。
[FunctionName("BackupTableStorageFunction")]
public static void Run([TimerTrigger("%BackUpTableStorageTriggerTime%")]TimerInfo myTimer, TraceWriter log, CancellationToken cancellationToken)
嘿,您也许可以在调试时读取属性,但是一旦您尝试在 Azure 中部署它,这些属性将不再起作用。 Azure 函数不允许嵌套属性,您必须在 "Values" 选项或 "ConnectionStrings" 中内联使用所有这些属性。 查看此文档作为参考: https://docs.microsoft.com/en-us/azure/azure-functions/functions-how-to-use-azure-function-app-settings
使用.Net 6
(可能还有一些更早的版本)可以将IConfiguration
注入到函数的构造函数中。
public Function1(IConfiguration configuration)
{
string setting = _configuration.GetValue<string>("MySetting");
}
MySetting
必须在 local.settings.json
的 Values
部分:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
"MySetting": "value"
}
}
它也适用于 Azure Function App 中的应用程序设置。