【问题标题】:Using Azure App Config -> Want to allow local config to override for devs使用 Azure App Config -> 希望允许本地配置覆盖开发人员
【发布时间】:2021-12-16 14:49:30
【问题描述】:

我有一个 Blazor 服务器应用。它现在使用 Azure App Config 来配置值 - 但我可以选择允许开发人员覆盖本地。

我遇到的问题是 CreateDefaultBuilder 首先从本地 appsettings.json/env/et 加载配置,然后加载 Azure App Config 值 - 如果存在本地设置(这通常是我想要的) )。

我看到了 CreateDefaultBuilder 的代码,我可以在 Azure App Config 加载后将其中的内容复制到我的代码中(当我想要这种开发行为时)(这应该覆盖本地 Azure App Config 中的任何值)设置。我可以根本不加载 Azure App Config 值,可选,但我宁愿让开发人员覆盖他们想要的本地内容,然后从 Azure App Config 中获取其余部分

这看起来很笨重。有什么更好的方法来做到这一点的建议吗?

我处理这个的代码:

 public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
             .ConfigureServices((context, services) =>
             {
                 certThumbprint = context.Configuration.GetValue<string>("CertificateThumbprint");
                 if (string.IsNullOrWhiteSpace(certThumbprint) == false)
                 {
                     var kestrelOptions = context.Configuration.GetSection("Kestrel");
                     if (kestrelOptions != null && kestrelOptions.Value != null)
                     {
                         services.Configure<KestrelServerOptions>(kestrelOptions);
                     }
                 }
             })
            .ConfigureAppConfiguration((hostingContext, config) =>
            {
                var settings = config.Build();
                var credentials = new DefaultAzureCredential(false);
                config.AddAzureAppConfiguration(options =>
                {
                    
                    var azAppConfigurationURI = settings.GetValue<string>("AzAppConfigurationURI");
                    var envName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");

                    //options.Connect(new Uri(azAppConfigurationURI), credentials)                        
                    options.Connect("Endpoint = end + key ") // Removed for this sample                       
                    .ConfigureKeyVault(kv =>
                    {
                        kv.SetCredential(credentials);
                    })
                    .ConfigureRefresh(refresh =>
                    {
                        refresh.Register("test", refreshAll: true)
                        .SetCacheExpiration(new TimeSpan(0, 1, 0));
                        
                    })                        
                   .UseFeatureFlags((featureFlagOptions =>
                   {
                       featureFlagOptions.Label = envName;
                       featureFlagOptions.CacheExpirationInterval = TimeSpan.FromMinutes(5);                           
                   }
                   ));
                });
            })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStaticWebAssets();
                webBuilder.ConfigureKestrel(serverOptions =>
                {
                    // Set properties and call methods on options
                    serverOptions.ConfigureHttpsDefaults(listenOptions =>
                    {
                        // certificate is an X509Certificate2
                        if (string.IsNullOrWhiteSpace(certThumbprint) == false)
                        {
                            listenOptions.ServerCertificate = GetCertificateFromStore(certThumbprint);
                        }
                    });

                })
                .UseStartup<Startup>();
            });

谢谢! -格雷格

【问题讨论】:

    标签: .net blazor blazor-server-side azure-app-configuration


    【解决方案1】:

    只需使用 appsettings.development.json。

    如果您谈论的是 Azure 应用服务,请查看部署槽。

    【讨论】:

    • 据我所知,当您调用 CreateDefaultBuilder 时,它会从 json 文件加载设置。然后,当您调用以获取 Azure 应用程序配置 (ConfigureAppConfiguration) 时,它将覆盖任何公用密钥。我希望它不要那样做(但在没有 dup 时仍然使用 Azure App Config)
    • @Greg 但我认为您错过了设置的重点。出于安全原因,Azure 设置会覆盖。您在源代码管理中没有部署的设置。如果您希望开发人员覆盖本地,只需使用 appsettings.development.json 并在本地运行或给他们自己的部署槽
    【解决方案2】:

    您可以使用IConfigurationBuilder.Sources 在配置生成器中重新排序配置源。这将允许您设置所需的优先级。您可以检查环境是否为 dev,如果是,请执行重新排序。否则,只需使用默认排序即可。

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 2023-01-09
      • 1970-01-01
      • 2012-04-17
      • 2014-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多