我有以下代码:
[FunctionName("FunctionValidateDriverRecord")]
public static async Task Run([TimerTrigger("0 */1 * * * *")]TimerInfo myTimer, TraceWriter log)
{
string connString = ConfigurationManager.ConnectionStrings["AssetContext"].ConnectionString;
string mail = ConfigurationManager.AppSettings["EmailForErrors"];
和local.settings.json:
{
"IsEncrypted": false,
"ConnectionStrings": {
"AssetContext": "data source=server;initial catalog=3md_vistracks_sync;integrated security=True;MultipleActiveResultSets=True"
},
"AppSettings": {
"EmailForErrors": "brauncomm@gmail.com"
}
}
connString
有值,但mail
为空。为什么?
答案 0 :(得分:2)
在local.settings.json中,您应该使用Values
而不是AppSettings
。 Azure功能本地开发需要文件模式。
您可能正在使用v1函数,请随意使用ConfigurationManager,因为您发现它对connectionString有效。 v2不支持ConfigurationManager,您可以引用环境变量。有关读取本地和Azure设置的详细信息,请参阅此answer。
答案 1 :(得分:1)
Azure函数使用环境变量。 https://docs.microsoft.com/en-us/sandbox/functions-recipes/environment-variables?tabs=csharp
我不确定使用ConfigurationManager是否存在实际的代码,但这不适用于Azure Functions。
答案 2 :(得分:0)
几天前我遇到了完全相同的问题,并使用IConfigurationBuilder解决了该问题。这是代码段。
[FunctionName("Function1")]
public static void Run([TimerTrigger("0 */1 * * * *")]TimerInfo myTimer, TraceWriter log, ExecutionContext context)
{
var config = new ConfigurationBuilder()
.SetBasePath(context.FunctionAppDirectory)
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
var cstr = config.GetConnectionString("SqlConnectionString");
var appSettings = config.GetSection("AppSettings")["EmailForErrors"];
log.Info($"C# Timer trigger function executed at: {DateTime.Now}");
}
答案 3 :(得分:0)
对于计时器触发器,不能使用Executioncontext。通过使用以下代码,您可以从Json文件中获取值。
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
var clientId = config["ClientId"];