Azure Functions - 当我尝试在本地调试时,配置设置 returns null

Azure Functions - configuration settings returns null when I try to debug locally

我有以下代码:

    [FunctionName("FunctionValidateDriverRecord")]
    public static async Task Run([TimerTrigger("0 */1 * * * *")]TimerInfo myTimer, TraceWriter log)
    {
        string connString = ConfigurationManager.ConnectionStrings["AssetContext"].ConnectionString;
        string mail = ConfigurationManager.AppSettings["EmailForErrors"];

和local.settings.json:

{
  "IsEncrypted": false,
  "ConnectionStrings": {
    "AssetContext": "data source=server;initial catalog=3md_vistracks_sync;integrated security=True;MultipleActiveResultSets=True"
  },
  "AppSettings": {
    "EmailForErrors": "brauncomm@gmail.com"
  }
}

connString 有值,但 mail 为空。为什么?

Azure Functions 使用环境变量。 https://docs.microsoft.com/en-us/sandbox/functions-recipes/environment-variables?tabs=csharp

我不确定是否有使用 ConfigurationManager 的实际代码,但这不适用于 Azure Functions。

在local.settings.json中,您应该使用Values而不是AppSettings。 Azure 函数本地开发需要文件架构。

您可能正在使用 v1 函数,请随意使用 ConfigurationManager,因为您发现它对 connectionString 有效。 v2 不支持 ConfigurationManager,您可以参考环境变量,请参阅此 了解有关读取本地和 Azure 设置的更多详细信息。

几天前我遇到了完全相同的问题并使用 IConfigurationBuilder 解决了它。这是代码片段。

[FunctionName("Function1")]
    public static void Run([TimerTrigger("0 */1 * * * *")]TimerInfo myTimer, TraceWriter log, ExecutionContext context)
    {
        var config = new ConfigurationBuilder()
        .SetBasePath(context.FunctionAppDirectory)
        .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
        .AddEnvironmentVariables()
        .Build();

        var cstr = config.GetConnectionString("SqlConnectionString");
        var appSettings = config.GetSection("AppSettings")["EmailForErrors"];

        log.Info($"C# Timer trigger function executed at: {DateTime.Now}");
    }

对于计时器触发器,您不能使用 Executioncontext。通过使用下面的代码,您可以从 Json 文件中获取值。

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

var clientId = config["ClientId"];