从Azure函数中的local.settings.json中读取自定义设置

我试图从local.settings.json文件中检索自定义设置。 示例我正在尝试读取以下local.settings.json文件中的表列表

{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "AzureWebJobsDashboard": "UseDevelopmentStorage=true", "TableList": "TestTableName1,TestTableName2" } } 

使用以下代码阅读它

 string tableslist = ConfigurationManager.AppSettings["TableList"]; 

并且它有效,但我在一些地方读过,这只适用于本地调试,在生产环境中部署之后可能无效。 有人能指出我如何以正确的方式做到这一点? 或者问题仅适用于连接字符串相关的设置?

@Kirk和@Slava帮助你摆脱困惑。 只需添加一些细节供您参考。

默认情况下,发布既不会将local.settings.json上载到Azure,也不会根据该本地文件对应用程序设置进行修改,因此我们需要在Azure门户上手动更新它们。 我们也可以在VS发布面板上执行此操作。(如果我们需要在发布之前更改设置,请先创建配置文件。)

在此处输入图像描述

关于如何在应用程序设置中获取参数,需要注意的一点是在v2函数(运行时测试版)中不再支持ConfigurationManager ,可能只会使用null或exception。 对于v1函数(运行时~1),它仍然有效。

  1. 对于v1function

    要读取Azure上的应用程序设置(也是local.settings.json中的Values ),建议使用System.Environment.GetEnvironmentVariable($"{parameterName}")

    转到连接字符串,遗憾的是GetEnvironmentVariable仅适用于Azure,因为连接字符串(local.settings.json中的ConnectionStrings )未导入到环境变量中。 所以我们需要ConfigurationManager,它可以在Azure和本地环境中运行。 当然它也可以读取应用程序设置。

  2. 对于v2function,应用程序设置和连接字符串有两种选择。

    一种是使用GetEnvironmentVariable。 我们可能会在Azure上的“连接字符串”的“ Type列中看到不同的前缀,或者您可以参考此列表 。

     // Get Application settings var appParameter= "AzureWebJobsStorage"; System.Environment.GetEnvironmentVariable($"{appParameter}"); // Get Connection strings(put local and Azure env together) var connParameter= "MySqlAzureConnection"; var Prefix = "SQLAZURE"; var connectionString = System.Environment.GetEnvironmentVariable($"ConnectionStrings:{connParameter}"); if(string.IsNullOrEmpty(connectionString )){ connectionString = System.Environment.GetEnvironmentVariable($"{Prefix}CONNSTR_{connParameter}"); } 

    另一个是使用ConfigurationBuilder。 添加ExecutionContext参数,用于定位functionapp目录。

     [FunctionName("FunctionName")] public static void Run(...,ExecutionContext context) { var config = new ConfigurationBuilder() .SetBasePath(context.FunctionAppDirectory) .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true) .AddEnvironmentVariables() .Build(); // Get Application Settings var appParameter= "AzureWebJobsStorage"; string appsetting = config[$"{appParameter}"]; // Get Connection strings var connParameter= "MySqlAzureConnection"; string connectionString = config.GetConnectionString($"{connParameter}"); }