Azure函数-尝试在本地调试时配置设置返回null

时间:2018-08-13 13:49:23

标签: c# azure azure-functions configurationmanager

我有以下代码:

    [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为空。为什么?

4 个答案:

答案 0 :(得分:2)

在local.settings.json中,您应该使用Values而不是AppSettings。 Azure功能本地开发需要文件模式。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

几天前我遇到了完全相同的问题,并使用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}");
    }

答案 3 :(得分:0)

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

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

var clientId = config["ClientId"];