我已将Azure应用配置为在配置设置中使用密钥保管库引用。总体上一切正常,但当我希望某个设置具有默认值以防密钥保管库中缺少该设置时,会出现问题。
下面是我的简化代码示例:
public class MySettings
{
public bool DoSomethingSpecial { get; set; }
public string SomeStringSetting { get; set; }
}
启动:
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)
如果我不将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将丢失的密钥库引用视为原始文本字符串。
我没有appsettings.json
中提到的设置-那里不需要。
我的Program.cs
是非常基本的老式. NET核心应用程序启动器:
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>();
}
有没有什么好方法可以在缺少密钥保险库值的情况下使用默认的false
值?
目前,我想到的唯一(丑陋的)解决方案是在serviceCollection.Configure<MySettings>
中的MySettings的每个设置字段周围使用try .. catch
。
1条答案
按热度按时间kx7yvsdv1#
如果您在appsettings.json中设置了相应的设置,则如果在AzureKeyVault中找不到它们,ASP.NET核心将选择它们。
大概是这样的