建议实践如何在Azure函数的local.settings.json文件中包括更复杂的配置JSON数据?

时间:2018-11-23 19:16:27

标签: azure azure-functions azure-functions-runtime azure-functions-core-tools

我正在使用Azure Functions 2

我正在这里浏览Azure Function Local设置文件文档:

https://docs.microsoft.com/en-us/azure/azure-functions/functions-run-local#local-settings-file

根据文档,这是local.settings.json文件的示例:

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "<language worker>",
    "AzureWebJobsStorage": "<connection-string>",
    "AzureWebJobsDashboard": "<connection-string>",
    "MyBindingConnection": "<binding-connection-string>"
  },
  "Host": {
    "LocalHttpPort": 7071,
    "CORS": "*"
  },
  "ConnectionStrings": {
    "SQLConnectionString": "<sqlclient-connection-string>"
  }
}

我了解“ ”中的项目将通过Environment.GetEnvironmentVariable

这样的环境变量提供

我需要在“函数”的设置中包括更复杂的设置(其中包含数组的嵌套JSON数据)。

什么是最佳做法或推荐做法?

1 个答案:

答案 0 :(得分:1)

Values集合应该是Dictionary<string, string>,因此我们不能将嵌套的JSON数据与数组放在一起。尝试为您的Json数据创建一个新部分,并照常读取Json文件。我们无法使用Environment.GetEnvironmentVariable,因为自定义设置未导入到环境变量中。

{
  "Values": {},
  "CustomSettings":{}
}

在功能方法签名中添加ExecutionContext context,以找到设置文件。

var reader = new StreamReader(context.FunctionAppDirectory+"/local.settings.json");
var myJson = reader.ReadToEnd();

对于v2功能,我们可以使用ConfigurationBuilder

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

local.settings.json旨在为本地开发人员提供Azure门户中等效的应用程序设置,默认情况下不会发布到Azure。要发布它,请右键单击项目> Edit <functionappname>.csproj并删除<CopyToPublishDirectory>Never</CopyToPublishDirectory>