我一直在玩Azure App Configuration。
这是一个示例配置:
var environmentVariable = Environment.GetEnvironmentVariable("AppConfigurationConnectionString");
var config =
new ConfigurationBuilder()
.AddAzureAppConfiguration(options =>
{
options.Connect(environmentVariable)
.ConfigureKeyVault(kv =>
{
kv.SetCredential(new DefaultAzureCredential());
});
})
.Build();
services.AddSingleton<IConfiguration>(config);
Run Code Online (Sandbox Code Playgroud)
在此之后,我可以将一个IConfiguration实例注入我的服务并用于_config["settingName"]访问配置设置。这一切都很好,而且非常好。
我不知道该怎么做的一件事是将相关设置组映射到强类型对象(也就是说,不必手动完成所有操作,我可以这样做,但是......希望有更好的方法) .
在常规的 ASP.NET 核心配置中,我可以将相关设置设置分组如下(即在appsettings.json)
{
"test": {
"key1": "value1",
"key2": "value2"
}
}
Run Code Online (Sandbox Code Playgroud)
使用 IOptions 模式如下:
services.Configure<Test>(config.GetSection("test"));
Run Code Online (Sandbox Code Playgroud)
这允许我将强类型IOptions<Test>实例注入到我的类中。IMO 这比我_config["key1"]用来获取配置设置的大型平面索引器要好一些。
Azure App 配置是否有一种方法可以让我自动配置可以注入到我的类中的强类型配置对象?
TIA
configuration azure .net-core asp.net-core azure-app-configuration
AZ 模块中没有任何 cmdlet 可用于从 Azure 应用程序配置获取键值对。除了 AZ CLI 之外还有其他选项吗?有没有办法通过 PowerShell 与服务交互?
Azure Functions 应用程序,运行时 v3。
该应用程序有一个FunctionsStartup类,它首先在其方法中启用 Azure 应用程序配置ConfigureAppConfiguration:
builder.ConfigurationBuilder.AddAzureAppConfiguration(options =>
{
options
.Connect(appConfigurationConnectionString)
.UseFeatureFlags();
});
Run Code Online (Sandbox Code Playgroud)
在其Configure方法中,它启用功能管理,并添加 Azure 应用程序配置服务(以便我们可以在运行时刷新设置):
builder.Services
.AddAzureAppConfiguration()
.AddFeatureManagement()
.AddFeatureFilter<ContextualTargetingFilter>();
Run Code Online (Sandbox Code Playgroud)
在 Azure 门户上有一个已启用的功能标志,称为CardExpirationNotice。该代码用于IFeatureManagerSnapshot检查该功能是否启用:
feature = nameof(Features.CardExpirationNotice);
var isEnabled = await _featureManagerSnapshot.IsEnabledAsync(feature);
Run Code Online (Sandbox Code Playgroud)
isEnabled是false,并且输出此日志消息:
找不到功能“CardExpirationNotice”的功能声明。
我尝试在 local.settings.json 中本地配置一个标志:
"FeatureManagement__CardExpirationNotice": true
Run Code Online (Sandbox Code Playgroud)
然后isEnabled是true,因此我可以将问题缩小到 Azure 应用程序配置,并排除功能管理实现。
我设置了一个简单的应用服务来使用/测试 Azure 应用配置
我遵循了示例应用程序,因此 CreateHostBuilder 看起来像:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
webBuilder.ConfigureAppConfiguration((hostingContext, config) =>
{
var settings = config.Build();
config.AddAzureAppConfiguration(settings["ConnectionStrings:AppConfig"]);
})
.UseStartup<Startup>());
Run Code Online (Sandbox Code Playgroud)
部署/运行应用程序时,如果没有指向 KeyVault 的 Azure 应用程序配置条目,则该行为是成功的。
当我在 Azure 应用配置中添加一个指向 KeyVault 的条目时,应用将无法启动(HTTP 错误 500.30 - ANCM 进程内启动失败),日志显示以下异常:
异常信息:Microsoft.Extensions.Configuration.AzureAppConfiguration.KeyVaultReferenceException:未配置密钥保管库凭据,也找不到匹配的秘密客户端..ErrorCode:, Key:TestConnectionString, Label:, Etag:6ezsqW96CsAet7Ym5H4DedsLTkI, SecretIdentifier: https://testkeyvault。 vault.azure.net/secrets/TestSecret ---> System.UnauthorizedAccessException:未配置密钥保管库凭据,也找不到匹配的机密客户端。
很明显有些东西没有得到正确保护,但我已经检查了很多次,并且 Key Vault 有一个访问策略,授予 Azure App Config 标识的获取/秘密列表。
我还尝试过主机构建器中的 ConfigureKeyVault 选项,即
public …Run Code Online (Sandbox Code Playgroud) azure azure-keyvault azure-web-app-service azure-app-configuration
我尝试在 Blazor 应用程序中使用 Azure 应用程序配置中的功能标志。我一直在关注Microsoft 的文档来添加它们。我可以通过将 FeatureManager 注入到我的代码部分并利用 .cshtml 文件中的功能标签来成功地使用它们,如下所示,
<feature name="Beta">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Beta" asp-action="Index">Beta</a>
</li>
</feature>
Run Code Online (Sandbox Code Playgroud)
但是,我无法在 .razor 文件中成功使用功能标签。这是由于无法将此指令添加到我的文件中造成的。
@addTagHelper *, Microsoft.FeatureManagement.AspNetCore
Run Code Online (Sandbox Code Playgroud)
有没有办法在我的 Razor 文件中使用功能标签?
我们最近将 Azure 应用程序配置添加到 Azure Functions 中,现在我们希望通过测试触发应用程序配置的启动代码。
我们的函数启动代码如下所示 -
public override void Configure(IFunctionsHostBuilder builder)
{
config = Utils.LoadConfig();
StartupHelper.AddCommonIoCDependencies(builder);
}
public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
{
//How do we trigger this method when testing???
StartupHelper.AddAzureAppConfiguration(builder);
}
Run Code Online (Sandbox Code Playgroud)
使用以下命令运行测试时会触发初始配置方法 -
private MyFunction_sut;
[SetUp]
public void Setup()
{
var funcStartup = new Startup();
var host = new HostBuilder()
.ConfigureWebJobs(funcStartup.Configure)
.Build();
_sut = new MyFunction(...);
}
Run Code Online (Sandbox Code Playgroud)
这适用于触发 Congfigure 方法。尽管 HostBuilder 有 ConfigureAppConfiguration 选项,但我不知道如何让它工作。我觉得我下面列出的内容应该有一种快速而简单的方法。
var host = new HostBuilder()
.ConfigureWebJobs(funcStartup.Configure)
.ConfigureAppConfiguration(x => {
//What do I …Run Code Online (Sandbox Code Playgroud) testing unit-testing azure azure-functions azure-app-configuration
我有一个 Blazor 应用程序,我想使用 Azure 应用程序配置。
我已成功设置获取配置值,但它找不到我的功能标志。
当我注入 IConfiguration 并查询配置值的值时,就像这样Configuration["value"]检索正确的数据。
但是,当我尝试检查我唯一的功能标志是否已启用(确实如此)时,结果始终为 false,我想这是因为应用程序找不到功能标志,而不是因为它读取的值错误(传递名称)不存在的功能标志会导致该方法返回“false”)。
启动.cs:
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Identity.Web;
using Microsoft.Identity.Web.UI;
using Microsoft.FeatureManagement;
namespace OreNoAppu
{
public class Startup
{
public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, …Run Code Online (Sandbox Code Playgroud) 我可以azurerm_app_configuration为 Azure 应用程序配置创建应用程序配置。并可以azurerm_private_endpoint使用 terraform 进行创建。
但我没有找到哪个 terraform 函数可以用于禁用公共访问,如下图所示。
有谁可以帮忙吗
我正在尝试使用简单的控制台应用程序访问应用程序配置。到目前为止我有:
static void Main(string[] args)
{
IConfiguration config = new ConfigurationBuilder()
.AddUserSecrets("e7315677-d6aa-41ab-b7cc-8e801a7c8ae9")
.AddAzureAppConfiguration("ConnectionStrings:AppConfig")
.Build();
Console.WriteLine("Hello World!");
}
Run Code Online (Sandbox Code Playgroud)
但抛出异常表明
System.ArgumentException:“连接字符串没有关键字“ConnectionStrings:AppConfig”的值。”
我已将此连接字符串放入 Secrets.json 中,并且我知道它是有效的。我究竟做错了什么?
{
"ConnectionStrings:AppConfig": "<my connection string>"
}
Run Code Online (Sandbox Code Playgroud)
谢谢。
凯文
我已在 Azure 应用程序配置中添加键值对,并尝试在 Startup.cs 类文件中读取它。请建议如何做到这一点。
public class Startup : FunctionsStartup
{
private static readonly string url= "*******************";
public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
{
string connectionString=????? //How to get this value from Azure app config
builder.Services.AddDbContext<DbContext, Context>(
options => SqlServerDbContextOptionsExtensions.UseSqlServer(options, connectionString));
builder.ConfigurationBuilder.AddAzureAppConfiguration(url);
}
}
Run Code Online (Sandbox Code Playgroud) azure ×7
.net-core ×2
c# ×2
app-config ×1
asp.net-core ×1
blazor ×1
powershell ×1
terraform ×1
testing ×1
unit-testing ×1