我在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
答案 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。
希望有帮助。