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

问题描述 投票:0回答:1

我在local.settings.json文件中有一个带有app设置的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

c# azure-functions appsettings
1个回答
1
投票

以下是在azure函数中读取设置的推荐方法。请找到附带的代码

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”:“我的站点名称”}},则会返回“我的站点名称”。

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

值集合应该是一个Dictionary,如果它包含任何非字符串值,则可能导致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。

希望能帮助到你。

© www.soinside.com 2019 - 2024. All rights reserved.