.net 如何在缺少keyvault值时提供默认的应用程序配置设置值?

4sup72z8  于 2023-02-26  发布在  .NET
关注(0)|答案(1)|浏览(137)

我已将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

kx7yvsdv

kx7yvsdv1#

如果您在appsettings.json中设置了相应的设置,则如果在AzureKeyVault中找不到它们,ASP.NET核心将选择它们。
大概是这样的

{
  "MyApp" : 
  { 
     "MySettings": 
     {
       "DoSomethingSpecial" :"12345"
     }
   }
}

相关问题