天蓝色函数local.settings.json中的随机无法访问的应用程序设置

时间:2019-02-27 21:08:51

标签: c# azure-functions appsettings

我在local.settings.json文件中有一个带有应用程序设置的azure函数。有时,当我开始调试功能时,会出现一行以检索设置,并且该设置为null。其他时候,它是json中的字符串。似乎没有押韵或理由。有没有办法强迫它每次都获得正确的值?调试器附加时是否存在某些竞争条件?

我的功能代码:

[FunctionName("MyAzureFunction")]
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]HttpRequestMessage req, TraceWriter log)
{
    // this string is null sometimes, sometimes not
    var baseApiString = ConfigurationManager.AppSettings["ApiBaseUrl"];

    //...more code
}

我的local.settings.json文件:

{
    "IsEncrypted": false,
    "Values": {
        "ApiBaseUrl": "http://myurl.api.local/"
    }
}

使用Azure 2.9

1 个答案:

答案 0 :(得分:1)

在这里,推荐您使用此方法读取天蓝色功能中的设置。请找到随附的代码

public static class EnvironmentVariablesExample
{
    [FunctionName("GetEnvironmentVariables")]
    public static void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, ILogger log)
    {
        log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
        log.LogInformation(GetEnvironmentVariable("AzureWebJobsStorage"));
        log.LogInformation(GetEnvironmentVariable("WEBSITE_SITE_NAME"));
    }

    public static string GetEnvironmentVariable(string name)
    {
        return name + ": " +
            System.Environment.GetEnvironmentVariable(name, EnvironmentVariableTarget.Process);
    }
}

在本地开发和在Azure中运行时,都可以从环境变量中读取

应用程序设置。在本地进行开发时,应用程序设置来自local.settings.json文件中的Values集合。在本地和Azure这两种环境中,GetEnvironmentVariable(“”)都会检索命名应用程序设置的值。例如,当您在本地运行时,如果您的local.settings.json文件包含{“ Values”:{“ WEBSITE_SITE_NAME”:“ My Site Name”}},则会返回“ My Site Name”。

System.Configuration.ConfigurationManager.AppSettings属性是获取应用程序设置值的替代API,但我们建议您使用 GetEnvironmentVariable ,如上所示。

值集合应该是字典,如果它包含任何非字符串值,则可能导致Azure函数无法从local.settings.json中读取值。

也为您提供背景信息,这是应该发生的情况。从VS运行时,应该编译所有文件并将其复制到输出路径,例如bin \ Debug \ net461。在那里,您应该找到每个函数的文件夹,以及host.json和local.settings.json。之后,VS从上面的路径启动Azure.Functions.Cli.exe,并将该文件夹作为当前工作目录,并将主机作为args启动。那应该将所有设置从local.settings.json复制到该文件夹​​中的Azure.Functions.Cli.exe.config。

希望有帮助。

相关问题