我有一个Azure函数,我从中读取如下所示的Json(local.settings.json)配置文件中的值:
"ConnectionStrings": {
"SqlConnectionString": "Server=..."
},
"OtherSettings": {
"MyData": "DataHere"
}
在我的Azure函数中,我正在读取连接字符串,如下所示:
string connectionString = System.Environment.GetEnvironmentVariable($"ConnectionStrings:SqlConnectionString", EnvironmentVariableTarget.Process);
这很好。但是,如果我在其他任何设置下尝试使用相同的技术,则将无法使用。例如:
string myData = System.Environment.GetEnvironmentVariable($"OtherSettings:MyData", EnvironmentVariableTarget.Process);
只返回null。请有人告诉我为什么它适用于连接字符串,但不能用于其他设置。另外,这是怎么回事呢(一旦功能被部署,我需要代码来拾取覆盖的参数)?
编辑:
我知道,如果local.settings.json在Values
节点中具有所有设置,则可以正常工作。我的问题与嵌套设置有关。
答案 0 :(得分:0)
是的,OtherSettings
不能像这样获得System.Environment.GetEnvironmentVariable
。您应该尝试以下方式。
您的功能签名:
在ExecutionContext context
之后,在函数上为 ILogger log
添加新参数。您的函数应如下所示:
[FunctionName("CuriousDevJsonSettingsFunction")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log, ExecutionContext context)
{
log.LogInformation("C# HTTP trigger function processed a request.");
}
功能主体上的配置生成器:
在函数主体上设置以下代码。它将获取您所有的local.settings.json
属性。
var config = new ConfigurationBuilder()
.SetBasePath(context.FunctionAppDirectory)
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
从函数中检索您的local.settings.json属性:
它将完全检索您在settings.json
文件中定义的属性及其值。
var otherSettings = new OtherSettings();
config.Bind("OtherSettings", otherSettings);
最终功能应类似于:
public static class CuriousDevJsonSettingsFunction
{
[FunctionName("CuriousDevJsonSettingsFunction")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log, ExecutionContext context)
{
log.LogInformation("C# HTTP trigger function processed a request.");
//Configuration Settings
var config = new ConfigurationBuilder()
.SetBasePath(context.FunctionAppDirectory)
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
//Access local.settings.json file
var otherSettings = new OtherSettings();
config.Bind("OtherSettings", otherSettings);
return new OkObjectResult(otherSettings.MyData);
}
}
我使用过的课程:
public class OtherSettings
{
public string MyData { get; set; }
}
注意:这是从函数中检索local.settings.json
属性值的方法。有关更多详细信息,请查看this docs