我在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
以下是在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。
希望能帮助到你。