当Key Vault值缺失时,如何为应用配置设置提供默认值?
Azure应用配置Key Vault引用缺失时设置默认值的优雅方案
我已将Azure应用配置为使用Key Vault引用,整体运行正常,但当Key Vault中缺失某个配置项时,尝试为该设置提供默认值时遇到了问题。
相关代码示例
配置实体类
public class MySettings { public bool DoSomethingSpecial { get; set; } public string SomeStringSetting { get; set; } }
Startup配置代码
serviceCollection.Configure<MySettings>(x => { configuration.Bind("MyApp:MySettings", x); });
Azure应用配置中的设置项
MyApp__MySettings__DoSomethingSpecial @Microsoft.KeyVault(SecretUri=https://myapp.vault.azure.net/secrets/MyApp--MySettings--DoSomethingSpecial)
Program.cs启动代码
public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) => { config.AddEnvironmentVariables(); }) .UseStartup<Startup>(); }
问题现象
当Key Vault中未添加DoSomethingSpecial = false这个密钥时,应用启动会抛出以下错误:
Failed to convert configuration value at 'MyApp:MySettings:DoSomethingSpecial' to type 'System.Boolean'. @Microsoft.KeyVault(SecretUri=https://andromeda-keyvault-dev.vault.azure.net/secrets/MyApp--MySettings--DoSomethingSpecial) is not a valid value for Boolean. String '@Microsoft.KeyVault(SecretUri=https://andromeda-keyvault-dev.vault.azure.net/secrets/MyApp--MySettings--DoSomethingSpecial)' was not recognized as a valid Boolean.
这说明Azure会把缺失的Key Vault引用直接当作原始字符串处理,而非触发默认值逻辑。我不想在appsettings.json中添加该设置,因为不需要硬编码默认值。
现有方案(不够优雅)
目前想到的唯一办法是在serviceCollection.Configure<MySettings>中为每个字段添加try..catch逻辑,但这种写法不够简洁美观。
求助需求
有没有更优雅的方式,在Key Vault值缺失时为DoSomethingSpecial设置默认值false?
内容的提问来源于stack exchange,提问作者JustAMartin
相关产品推荐
相关产品推荐

