在 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 无效。

我正在使用:

我是不是漏掉了什么?

首先,我创建了一个示例并使用您的 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.jsonValues 部分:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
    "MySetting": "value"
  }
}

它也适用于 Azure Function App 中的应用程序设置。