快速入门:向 Aspire 应用添加功能标志

在本快速入门中,你将在 Azure 应用配置中创建一个功能标志,并使用它在 Aspire 应用中动态控制新网页的可用性,而无需重启或重新部署它。

功能管理支持扩展了应用程序配置中的动态配置功能。 本快速入门中的示例基于动态配置教程中引入的 Aspire 应用。 在继续之前,请先完成 快速入门教程 ,以创建具有动态配置的 Aspire 应用。

先决条件

按照文档进行,来使用动态配置创建 Aspire 解决方案。

创建功能标志

将名为 Beta 的功能标志添加到应用配置存储(在 先决条件 步骤中创建),并保留 标签说明 及其默认值。 有关如何使用 Azure 门户或 CLI 将功能标志添加到商店的信息,请转到 创建功能标志

添加名为 Beta 的功能标志的屏幕截图。

通过应用配置模拟器 UI 添加以下键值。

Key 内容类型 价值
.appconfig.featureflag/Beta application/vnd.microsoft.appconfig.ff+json;charset=utf-8 {“id”:“Beta”,“enabled”:false}

将功能标志添加到模拟器的屏幕截图。

功能标志是定义Microsoft功能标志的特殊键值。 配置提供程序按其特定内容类型和密钥前缀标识功能标志。 功能标志的值是一个遵循Microsoft Feature Flag schema的 JSON 对象。

  • 功能标志内容类型: application/vnd.microsoft.appconfig.ff+json;charset=utf-8
  • 功能标志键前缀: .appconfig.featureflag/

使用功能标志

  1. 导航到 Web 项目的目录(在 先决条件 步骤中创建)。 运行以下命令以添加 Microsoft.FeatureManagement.AspNetCore Nuget 包。

    dotnet add package Microsoft.FeatureManagement.AspNetCore
    
  2. 打开Program.cs,并在UseFeatureFlags调用中添加对AddAzureAppConfiguration方法的调用。 可以使用 Microsoft Entra ID(建议)或连接字符串连接到应用程序配置。 以下代码片段演示如何使用 Microsoft Entra ID。

    builder.AddAzureAppConfiguration(
        "appconfiguration",
        configureOptions: options =>
        {
            // Load all keys that start with `TestApp:` and have no label.
            options.Select("TestApp:*", LabelFilter.Null);
            // Reload configuration if any key-values have changed.
            options.ConfigureRefresh(refreshOptions =>
                refreshOptions.RegisterAll());
            // Load all feature flags with no label
            options.UseFeatureFlags();
        });
    

    小窍门

    如果未向UseFeatureFlags方法传递参数,它将在应用配置存储中加载所有没有标签的功能标志。 功能标志的默认刷新间隔为 30 秒。 可以通过 FeatureFlagOptions 参数自定义此行为。 例如,以下代码片段仅加载键名以“TestApp:”开头的,并具有标签“dev”的功能标志。 该代码还将刷新间隔时间更改为 5 分钟。 请注意,此刷新间隔时间与常规键值的刷新间隔时间不同。

    options.UseFeatureFlags(featureFlagOptions =>
    {
        featureFlagOptions.Select("TestApp:*", "dev");
        featureFlagOptions.CacheExpirationInterval = TimeSpan.FromMinutes(5);
    });
    
  3. 通过调用 AddFeatureManagement向应用的服务集合添加功能管理。

    使用以下代码 更新Program.cs

    // Existing code in Program.cs
    // ... ...
    
    // Add Azure App Configuration middleware to the container of services.
    builder.Services.AddAzureAppConfiguration();
    
    // Add feature management to the container of services.
    builder.Services.AddFeatureManagement();
    
    var app = builder.Build();
    
    // The rest of existing code in program.cs
    // ... ...
    

    在该文件的顶部添加 using Microsoft.FeatureManagement;(如果没有)。

  4. Components/Pages 目录下添加名为 Beta.razor 的新 Razor 页面。

    @page "/beta"
    
    @inject IFeatureManager FeatureManager
    
    @if (isBetaEnabled)
    {
        <h1>This is the beta website.</h1>
    } 
    else
    {
        <h1>Not found.</h1>
    }
    
    @code {
        private bool isBetaEnabled;
    
        protected override async Task OnInitializedAsync()
        {
            isBetaEnabled = await FeatureManager.IsEnabledAsync("Beta");
        }
    }
    
  5. 打开 _Imports.razor,并导入功能管理命名空间。

    @using Microsoft.FeatureManagement
    
  6. Components/Layout 目录中打开 NavMenu.razor

    在文件顶部插入IVariantFeatureManager

    @inject IVariantFeatureManager FeatureManager
    
    <div class="top-row ps-3 navbar navbar-dark">
        <div class="container-fluid">
            <a class="navbar-brand" href="">AspireApp</a>
        </div>
    </div>
    

    添加以下代码。

    // Existing code
    // ... ...
    <div class="nav-scrollable" onclick="document.querySelector('.navbar-toggler').click()">
        <nav class="nav flex-column">
            // Existing code
            // ... ...
    
            @if (isBetaEnabled)
            {
                <div class="nav-item px-3">
                    <NavLink class="nav-link" href="beta">
                        <span class="bi bi-list-nested" aria-hidden="true"></span> Beta
                    </NavLink>
                </div>
            }
        </nav>
    </div>
    
    @code {
        private bool isBetaEnabled;
    
        protected override async Task OnInitializedAsync()
        {
            isBetaEnabled = await FeatureManager.IsEnabledAsync("Beta");
        }
    }
    

在本地运行应用

  1. 运行 AppHost 项目。 转到 Aspire 仪表板并打开 Web 应用。

    在侧栏中有三个按钮的 Web 应用的屏幕截图。

  2. 在 Azure 门户中,导航到应用配置存储 的功能管理器 并找到 Beta 功能标志。 通过选中“已启用”下的复选框来启用该标志

  3. 多次刷新页面。 刷新间隔时间窗口通过时,页面将显示更新的内容。

    边栏上带有 Beta 按钮的 Web 应用的屏幕截图。

  4. 单击 Beta 按钮。 这会带您到您动态启用的测试页面。

    Beta 页的屏幕截图。

在本地运行应用

  1. 运行 AppHost 项目。 转到 Aspire 仪表板并打开 Web 应用。

    在侧栏中有三个按钮的 Web 应用的屏幕截图。

  2. 转到模拟器,编辑功能标志的值以启用它。

    Key 价值
    appconfig.featureflag/Beta {“id”:“Beta”,“enabled”:true}
  3. 多次刷新页面。 刷新间隔时间窗口通过时,页面将显示更新的内容。

    边栏上带有 Beta 按钮的 Web 应用的屏幕截图。

  4. 单击 Beta 按钮。 这会带您到您动态启用的测试页面。

    Beta 页的屏幕截图。

后续步骤

在本快速入门中,你在动态配置的基础上向 Aspire 应用添加了功能管理功能。 Microsoft.FeatureManagement.AspNetCore 库提供与 ASP.NET Core 应用的集成,包括 MVC 控制器动作、Razor 页面、视图、路由和中间件中的功能管理。 有关 .NET 功能管理库的完整功能概要,请继续阅读以下文档。

虽然使用功能标志可以在应用中激活或停用功能,但你可能希望根据应用的逻辑自定义功能标志。 使用功能筛选器可以按条件启用功能标志。 有关详细信息,请继续阅读以下教程。

Azure 应用程序配置提供了内置的功能筛选器,使你可以仅在特定的时段或者仅对应用的特定目标受众激活功能标志。 有关详细信息,请继续阅读以下教程。

若要为其他类型的应用启用功能管理功能,请继续学习以下教程。

若要详细了解如何在 Azure 应用程序配置中管理功能标志,请继续阅读以下教程。