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

时间:2017-10-12 16:32:18

标签: json azure azure-functions appsettings

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

{
   "IsEncrypted":false,
   "Values" : {
      "CustomUrl" : "www.google.com",
       "Keys": { 
           "Value1":"1",
           "Value2" :"2"
       }
   }
}

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

  

.Net Framework: 4.7

     

Microsoft.NET.Sdk.Functions: 1.0.5

     

System.Configuration.ConfigurationManager :4.4.0

     

Azure.Functions.Cli: 1.0.4

我错过了什么吗?

6 个答案:

答案 0 :(得分:13)

Environment.GetEnvironmentVariable("key")

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

答案 1 :(得分:9)

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

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

我的测试:

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

{
  "IsEncrypted": false,
  "Values": {
    "CustomUrl": "www.google.com",
    "testkey": {
      "name": "kname1",
      "value": "kval1"
    }
  }
}

enter image description here

答案 2 :(得分:2)

Azure函数将二进制文件复制到bin文件夹并使用azure函数cli运行,因此它将搜索local.settings.json,因此请确保将"Copy to Output Directory"设置为"Copy Always" < / p>

enter image description here

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

嘿,您也许可以在调试时读取属性,但是一旦尝试以天蓝色的方式部署这些属性,这些属性将不再起作用。 Azure函数不允许嵌套属性,必须在“值”选项或“连接字符串”中内联使用所有它们。 请参阅此文档作为参考: https://docs.microsoft.com/en-us/azure/azure-functions/functions-how-to-use-azure-function-app-settings

答案 5 :(得分:0)

我喜欢使用ConfigurationBuilder绑定设置。 这确实为您的设置提供了复杂对象和默认值。 您需要将ExecutionContext作为依赖注入参数添加到函数中,例如:

 public static void Run([TimerTrigger("0 */5 * * * *", RunOnStartup = true)]TimerInfo timer, ExecutionContext context, ILogger logger)

现在您可以构建配置:

var config = new ConfigurationBuilder()
                .SetBasePath(context.FunctionAppDirectory)
                .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
                .AddEnvironmentVariables()
                .Build();

AddJsonFile()确实将json文件添加为配置提供程序,而AddEnvironmentVariables将azure提供的环境变量绑定到配置中。

您现在可以使用config.Get()config.GetSection()。 您还可以将设置“绑定”到设置对象:

var settings = new AppSettings();
config.GetSection("App").Bind(settings);

//settings.MySetting
//settings.MyOffset

具有AppSettings类:

public class AppSettings
{
        public string MySetting { get; set; } = "DefaultValue"
        public TimeSpan MyOffset { get; set; } = TimeSpan.Zero
}

local.settings.json

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet"
  },
  "App": {
    "MySetting": "Real Value",
    "MyOffset": "15:00:00"
  }
}