从Azure函数访问嵌套的Json设置

时间:2019-09-02 14:02:48

标签: .net azure environment-variables azure-functions connection-string

我有一个Azure函数,我从中读取如下所示的Json(local.settings.json)配置文件中的值:

  "ConnectionStrings": {
    "SqlConnectionString": "Server=..."
  },

  "OtherSettings": {
    "MyData": "DataHere"
  }

在我的Azure函数中,我正在读取连接字符串,如下所示:

string connectionString = System.Environment.GetEnvironmentVariable($"ConnectionStrings:SqlConnectionString", EnvironmentVariableTarget.Process);

这很好。但是,如果我在其他任何设置下尝试使用相同的技术,则将无法使用。例如:

string myData = System.Environment.GetEnvironmentVariable($"OtherSettings:MyData", EnvironmentVariableTarget.Process);

只返回null。请有人告诉我为什么它适用于连接字符串,但不能用于其他设置。另外,这是怎么回事呢(一旦功能被部署,我需要代码来拾取覆盖的参数)?

编辑:

我知道,如果local.settings.json在Values节点中具有所有设置,则可以正常工作。我的问题与嵌套设置有关。

1 个答案:

答案 0 :(得分:0)

是的,OtherSettings不能像这样获得System.Environment.GetEnvironmentVariable。您应该尝试以下方式。

您的功能签名:

ExecutionContext context 之后,在

函数上为 ILogger log 添加新参数。您的函数应如下所示:

        [FunctionName("CuriousDevJsonSettingsFunction")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log, ExecutionContext context)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");
        }

功能主体上的配置生成器:

在函数主体上设置以下代码。它将获取您所有的local.settings.json属性。

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

从函数中检索您的local.settings.json属性:

它将完全检索您在settings.json文件中定义的属性及其值。

 var otherSettings = new OtherSettings();
 config.Bind("OtherSettings", otherSettings);

最终功能应类似于:

public static class CuriousDevJsonSettingsFunction
    {
        [FunctionName("CuriousDevJsonSettingsFunction")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log, ExecutionContext context)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

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

            //Access local.settings.json file 
            var otherSettings = new OtherSettings();
            config.Bind("OtherSettings", otherSettings);

            return new OkObjectResult(otherSettings.MyData);
        }
    }

我使用过的课程:

  public class OtherSettings
    {
        public string MyData { get; set; }
    }

注意:这是从函数中检索local.settings.json属性值的方法。有关更多详细信息,请查看this docs