我在VS 2017中进行azure功能开发。我需要设置一些自定义配置参数。我在local.settings.json
下的Values
下添加了它们。
{
"IsEncrypted":false,
"Values" : {
"CustomUrl" : "www.google.com",
"Keys": {
"Value1":"1",
"Value2" :"2"
}
}
}
现在,ConfigurationManager.AppSettings["CustomUrl"]
返回null。
.Net Framework: 4.7
Microsoft.NET.Sdk.Functions: 1.0.5
System.Configuration.ConfigurationManager :4.4.0
Azure.Functions.Cli: 1.0.4
我错过了什么吗?
答案 0 :(得分:13)
Environment.GetEnvironmentVariable("key")
我能够使用上面的代码行从local.settings.json中读取值。
答案 1 :(得分:9)
首先,我创建一个示例并使用 local.settings.json 数据进行测试,正如Mikhail和ahmelsayed所说,它运行正常。
此外,据我所知,Values
集合应该是一个Dictionary,如果它包含任何非字符串值,则可能导致Azure函数无法从local.settings.json读取值。 / p>
我的测试:
ConfigurationManager.AppSettings["CustomUrl"]
使用以下local.settings.json返回null。
{
"IsEncrypted": false,
"Values": {
"CustomUrl": "www.google.com",
"testkey": {
"name": "kname1",
"value": "kval1"
}
}
}
答案 2 :(得分:2)
Azure函数将二进制文件复制到bin文件夹并使用azure函数cli运行,因此它将搜索local.settings.json,因此请确保将"Copy to Output Directory"
设置为"Copy Always"
< / p>
答案 3 :(得分:0)
如果您正在使用基于TimeTrigger的Azure函数,则可以从Azure函数访问密钥(在local.settings.json中创建),如下所示。
[FunctionName("BackupTableStorageFunction")]
public static void Run([TimerTrigger("%BackUpTableStorageTriggerTime%")]TimerInfo myTimer, TraceWriter log, CancellationToken cancellationToken)
答案 4 :(得分:0)
嘿,您也许可以在调试时读取属性,但是一旦尝试以天蓝色的方式部署这些属性,这些属性将不再起作用。 Azure函数不允许嵌套属性,必须在“值”选项或“连接字符串”中内联使用所有它们。 请参阅此文档作为参考: https://docs.microsoft.com/en-us/azure/azure-functions/functions-how-to-use-azure-function-app-settings
答案 5 :(得分:0)
我喜欢使用ConfigurationBuilder
绑定设置。
这确实为您的设置提供了复杂对象和默认值。
您需要将ExecutionContext
作为依赖注入参数添加到函数中,例如:
public static void Run([TimerTrigger("0 */5 * * * *", RunOnStartup = true)]TimerInfo timer, ExecutionContext context, ILogger logger)
现在您可以构建配置:
var config = new ConfigurationBuilder()
.SetBasePath(context.FunctionAppDirectory)
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
AddJsonFile()
确实将json文件添加为配置提供程序,而AddEnvironmentVariables
将azure提供的环境变量绑定到配置中。
您现在可以使用config.Get()
或config.GetSection()
。
您还可以将设置“绑定”到设置对象:
var settings = new AppSettings();
config.GetSection("App").Bind(settings);
//settings.MySetting
//settings.MyOffset
具有AppSettings
类:
public class AppSettings
{
public string MySetting { get; set; } = "DefaultValue"
public TimeSpan MyOffset { get; set; } = TimeSpan.Zero
}
和local.settings.json
:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet"
},
"App": {
"MySetting": "Real Value",
"MyOffset": "15:00:00"
}
}