在VS 2017 Azure功能开发中读取local.settings.json中的值

Ven*_*nky 15 json appsettings azure azure-functions

我在VS 2017中进行azure功能开发.我需要设置一些自定义配置参数.我把它们添加到了local.settings.json下面Values.

{
   "IsEncrypted":false,
   "Values" : {
      "CustomUrl" : "www.google.com",
       "Keys": { 
           "Value1":"1",
           "Value2" :"2"
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

现在,ConfigurationManager.AppSettings["CustomUrl"]返回null.

.Net框架: 4.7

Microsoft.NET.Sdk.Functions: 1.0.5

System.Configuration.ConfigurationManager:4.4.0

Azure.Functions.Cli: 1.0.4

我错过了什么吗?

jay*_*a_j 21

Environment.GetEnvironmentVariable("key")

我能够使用上面的代码行从local.settings.json读取值.

  • Microsoft建议使用此方法,因为它在local.settings.json本地和Azure中都可以使用.https://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-class-library#environment-variables (7认同)
  • 我们如何使用 Environment 访问 ConnectionStrings 对象中的键? (2认同)
  • 这是我们使用函数应用程序时的正确答案 (2认同)

Fei*_*Han 10

首先,我创建一个示例并使用local.settings.json数据进行测试,正如Mikhail和ahmelsayed所说,它运行正常.

另外,据我所知,Values集合应该是一个Dictionary,如果它包含任何非字符串值,则可能导致Azure函数无法从local.settings.json读取值.

我的测试:

ConfigurationManager.AppSettings["CustomUrl"] 使用以下local.settings.json返回null.

{
  "IsEncrypted": false,
  "Values": {
    "CustomUrl": "www.google.com",
    "testkey": {
      "name": "kname1",
      "value": "kval1"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 更准确地说,Azure Functions 根本不支持嵌套设置,即“local.settings.json”文件**与 .NET Core 中的“appsettings.json”工作方式不同:https://github .com/Azure/azure-functions-host/issues/4737#issuecomment-325045802 (2认同)

Ash*_*ain 6

如果您使用基于 TimeTrigger 的 Azure 函数,则可以从 Azure 函数访问您的密钥(在 local.settings.json 中创建),如下所示。

[FunctionName("BackupTableStorageFunction")]
public static void Run([TimerTrigger("%BackUpTableStorageTriggerTime%")]TimerInfo myTimer, TraceWriter log, CancellationToken cancellationToken)
Run Code Online (Sandbox Code Playgroud)


Alb*_*rtK 6

使用.Net 6(可能还有一些早期版本)可以注入IConfiguration到函数的构造函数中。

public Function1(IConfiguration configuration)
{
    string setting = _configuration.GetValue<string>("MySetting");
}
Run Code Online (Sandbox Code Playgroud)

MySetting必须位于Values以下部分local.settings.json

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
    "MySetting": "value"
  }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 函数可以是实例方法。请参阅[此](https://learn.microsoft.com/en-us/azure/azure-functions/functions-dotnet-dependency-injection#use-injected-dependencies)链接。 (4认同)

Niv*_*nan 5

您已设置Azure的功能使用复制湛蓝的功能CLI,那么它将搜索local.settings.json,所以一定要确保二进制文件bin文件夹并运行"Copy to Output Directory""Copy Always"

在此处输入图片说明