Azure Functions - 当我尝试在本地调试时,配置设置 returns null
Azure Functions - configuration settings returns null when I try to debug locally
我有以下代码:
[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
为空。为什么?
Azure Functions 使用环境变量。 https://docs.microsoft.com/en-us/sandbox/functions-recipes/environment-variables?tabs=csharp
我不确定是否有使用 ConfigurationManager 的实际代码,但这不适用于 Azure Functions。
在local.settings.json中,您应该使用Values
而不是AppSettings
。 Azure 函数本地开发需要文件架构。
您可能正在使用 v1 函数,请随意使用 ConfigurationManager,因为您发现它对 connectionString 有效。 v2 不支持 ConfigurationManager,您可以参考环境变量,请参阅此 了解有关读取本地和 Azure 设置的更多详细信息。
几天前我遇到了完全相同的问题并使用 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}");
}
对于计时器触发器,您不能使用 Executioncontext。通过使用下面的代码,您可以从 Json 文件中获取值。
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
var clientId = config["ClientId"];
我有以下代码:
[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
为空。为什么?
Azure Functions 使用环境变量。 https://docs.microsoft.com/en-us/sandbox/functions-recipes/environment-variables?tabs=csharp
我不确定是否有使用 ConfigurationManager 的实际代码,但这不适用于 Azure Functions。
在local.settings.json中,您应该使用Values
而不是AppSettings
。 Azure 函数本地开发需要文件架构。
您可能正在使用 v1 函数,请随意使用 ConfigurationManager,因为您发现它对 connectionString 有效。 v2 不支持 ConfigurationManager,您可以参考环境变量,请参阅此
几天前我遇到了完全相同的问题并使用 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}");
}
对于计时器触发器,您不能使用 Executioncontext。通过使用下面的代码,您可以从 Json 文件中获取值。
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
var clientId = config["ClientId"];