【发布时间】: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