首页 > 解决方案 > 推荐实践如何在 Azure Function local.settings.json 文件中包含更复杂的配置 JSON 数据?

问题描述

我正在使用 Azure Functions 2

我在这里浏览 Azure 函数本地设置文件文档:

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>"
  }
}

我了解“<strong>Values”中的项目将通过环境变量提供,例如Environment.GetEnvironmentVariable

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

这样做的最佳做法或推荐做法是什么?

标签: azureazure-functionsazure-functions-runtimeazure-functions-core-tools

解决方案


Valuescollection 应该是 a 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。要发布它,请右键单击 project>Edit <functionappname>.csproj并删除<CopyToPublishDirectory>Never</CopyToPublishDirectory>.


推荐阅读