我正在努力从Azure Webjob SDK 3.0项目中的appsettings.json文件中读取任何变量。
我正在使用:
- Microsoft.Azure.WebJobs.Core version="3.0.6">
- Microsoft.Azure.WebJobs.Extensions version="3.0.2">
- Microsoft.扩展.配置版本="2.2.0">
我尝试了以下方法:
System.Configuration.ConfigurationManager.AppSettings["ApiUrl"]
但这返回 null 并且无法读取。我已经检查了有关 SO 的文档和其他问题,但目前就像大海捞针一样。
程序.cs
static async Task Main(string[] args)
{
var builder = new HostBuilder()
.ConfigureWebJobs(b =>
{
b.AddAzureStorageCoreServices()
.AddAzureStorage()
.AddTimers();
b.UseHostId(Environment.UserName.ToLowerInvariant());
})
.ConfigureAppConfiguration((b, c)=>
{
var env = b.HostingEnvironment;
c.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
c.AddCommandLine(args);
c.AddEnvironmentVariables();
c.Build();
})
.ConfigureLogging((context, b) =>
{
b.SetMinimumLevel(LogLevel.Debug);
b.AddConsole();
string appInsightsKey = context.Configuration["APPINSIGHTS_INSTRUMENTATIONKEY"];
if (!string.IsNullOrEmpty(appInsightsKey))
{
b.AddApplicationInsights(o => o.InstrumentationKey = appInsightsKey);
}
})
.UseConsoleLifetime();
var host = builder.Build();
using (host)
{
await host.RunAsync();
}
}
功能.cs
public static async Task ProcessAsync([TimerTrigger("0 */3 * * * *")] TimerInfo timerInfo, ILogger log)
{
//I want to read my appsettings.json here!
}
appsettings.json 示例:
{
"AzureWebJobsDashboard": "################",
"AzureWebJobsStorage": "################",
"ApiUrl": "#############",
"APPINSIGHTS_INSTRUMENTATIONKEY": "############"
}
忽略这个 - 仍然不起作用
刚想通!在我的函数类开始时初始化它为我修复了它:
private readonly IConfiguration _configuration;
public Functions(IConfiguration configuration)
{
_configuration = configuration;
}
public static async Task ProcessAsync([TimerTrigger("0 */3 * * * *")] TimerInfo timerInfo, ILogger log)
{
var conf = _configuration["ApiUrl"];
}
这有效,但会导致 Web 作业作为一个函数运行。每个运行都应细分为日志中的 WebJob 函数父级下的每次单独运行。令人难以置信地沮丧。
如果有人可以提供帮助,请告诉我。