Включение поэтапного развертывания функций для определенных аудиторий

Флаги компонентов позволяют динамически активировать или деактивировать функциональные возможности в приложении. Фильтры компонентов определяют состояние флага компонента при каждой его оценке. Библиотека Microsoft.FeatureManagement включает фильтр TargetingFilter, который включает флаг компонента для указанного списка пользователей и групп либо для указанного процента пользователей. TargetingFilter может закрепляться. Это означает, что после того, как отдельный пользователь получит компонент, он будет видеть его во всех будущих запросах. Можно использовать TargetingFilter для включения компонента для конкретной учетной записи во время демонстрации, чтобы последовательно развернуть новые компоненты для пользователей в разных группах или "кругах" и т. д.

В этой статье вы узнаете, как развернуть новый компонент в веб-приложении ASP.NET Core для определенных пользователей и групп с помощью TargetingFilter Конфигурации приложений Azure.

Необходимые компоненты

Создание веб-приложения с флагами компонентов и проверкой подлинности

Чтобы развернуть компоненты на основе пользователей и групп, вам потребуется веб-приложение, позволяющее пользователям входить в систему.

  1. Создайте веб-приложение для проверки подлинности в локальной базе данных с помощью следующей команды:

    dotnet new mvc --auth Individual -o TestFeatureFlags
    
  2. Выполните сборку и запуск, а затем щелкните ссылку Регистрация в правом верхнем углу, чтобы создать новую учетную запись пользователя. Используйте адрес электронной почты test@contoso.com. На экране Подтверждение регистрации выберите Щелкните здесь, чтобы подтвердить свою учетную запись.

  3. Следуйте инструкциям в кратком руководстве по добавлению флагов компонентов в приложение ASP.NET Core, чтобы добавить флаг компонента в новое веб-приложение.

  4. Переключите флаг компонента в Конфигурации приложений. Проверьте, что это действие управляет видимостью элемента Beta на панели навигации.

Обновление кода веб-приложения для использования TargetingFilter

На этом этапе можно использовать флаг компонента, чтобы включить или отключить компонент Beta для всех пользователей. Чтобы включить флаг компонента для некоторых пользователей и отключить его для других, обновите код для использования TargetingFilter. В этом примере вы будете использовать адрес электронной почты пользователя, выполнившего вход, в качестве идентификатора пользователя и часть имени домена адреса электронной почты в качестве группы. Вы добавите пользователя и группу в TargetingContext. TargetingFilter использует этот контекст для определения состояния флага компонента для каждого запроса.

  1. Выполните обновление до последней версии пакета Microsoft.FeatureManagement.AspNetCore.

    dotnet add package Microsoft.FeatureManagement.AspNetCore
    
  2. Добавьте файл TestTargetingContextAccessor.cs:

    using Microsoft.AspNetCore.Http;
    using Microsoft.FeatureManagement.FeatureFilters;
    using System;
    using System.Collections.Generic;
    using System.Threading.Tasks;
    
    namespace TestFeatureFlags
    {
        public class TestTargetingContextAccessor : ITargetingContextAccessor
        {
            private const string TargetingContextLookup = "TestTargetingContextAccessor.TargetingContext";
            private readonly IHttpContextAccessor _httpContextAccessor;
    
            public TestTargetingContextAccessor(IHttpContextAccessor httpContextAccessor)
            {
                _httpContextAccessor = httpContextAccessor ?? throw new ArgumentNullException(nameof(httpContextAccessor));
            }
    
            public ValueTask<TargetingContext> GetContextAsync()
            {
                HttpContext httpContext = _httpContextAccessor.HttpContext;
                if (httpContext.Items.TryGetValue(TargetingContextLookup, out object value))
                {
                    return new ValueTask<TargetingContext>((TargetingContext)value);
                }
                List<string> groups = new List<string>();
                if (httpContext.User.Identity.Name != null)
                {
                    groups.Add(httpContext.User.Identity.Name.Split("@", StringSplitOptions.None)[1]);
                }
                TargetingContext targetingContext = new TargetingContext
                {
                    UserId = httpContext.User.Identity.Name,
                    Groups = groups
                };
                httpContext.Items[TargetingContextLookup] = targetingContext;
                return new ValueTask<TargetingContext>(targetingContext);
            }
        }
    }
    
  3. В Startup.cs добавьте ссылку на пространство имен Microsoft.FeatureManagement.FeatureFilters:

    using Microsoft.FeatureManagement.FeatureFilters;
    
  4. Обновите метод ConfigureServices для регистрации TargetingFilter, следуя вызову AddFeatureManagement():

    services.AddFeatureManagement()
            .AddFeatureFilter<TargetingFilter>();
    
  5. Обновите метод ConfigureServices, чтобы добавить TestTargetingContextAccessor, созданный ранее, в коллекцию служб. TargetingFilter использует его для определения контекста назначения при каждом вычислении флага компонента.

      services.AddSingleton<ITargetingContextAccessor, TestTargetingContextAccessor>();
    

Весь метод ConfigureServices будет выглядеть следующим образом:

    public void ConfigureServices(IServiceCollection services)
    {
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlite(
            Configuration.GetConnectionString("DefaultConnection")));
    services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
            .AddEntityFrameworkStores<ApplicationDbContext>();
    services.AddControllersWithViews();
    services.AddRazorPages();

    // Add feature management, targeting filter, and ITargetingContextAccessor to service collection
    services.AddFeatureManagement().AddFeatureFilter<TargetingFilter>();
    services.AddSingleton<ITargetingContextAccessor, TestTargetingContextAccessor>();
    }

Обновление флага компонента для использования TargetingFilter

  1. На портале Azure перейдите к хранилищу Конфигурации приложений и выберите Диспетчер компонентов.

  2. Выберите контекстное меню для флага компонента Beta, созданного в кратком руководстве. Выберите Изменить.

    Edit Beta feature flag

  3. На экране редактирования установите флажок Включить флаг компонента, если он еще не установлен. Затем установите флажок Использовать фильтр компонентов.

  4. Выберите кнопку Создать.

  5. Выберите фильтр целевого назначения в раскрывающемся списке типа фильтра.

  6. Выберите переопределение по группам и переопределить пользователями проверка box.

  7. Выберите следующие параметры.

    • Значение в процентах по умолчанию: 0
    • Включить группы: введите имяcontoso.com и процент50
    • Исключить группы: contoso-xyz.com
    • Включить пользователей: test@contoso.com
    • Исключите пользователей: testuser@contoso.com

    Экран фильтра компонентов будет выглядеть следующим образом:

    Conditional feature flag

    Эти параметры приводят к следующему поведению:

    • Флаг функции всегда отключен для пользователя, так как указан в разделе "Исключить пользователей".testuser@contoso.comtestuser@contoso.com
    • Флаг компонента всегда отключен для пользователей в contoso-xyz.comcontoso-xyz.comразделе "Исключения групп".
    • Флаг функции всегда включен для пользователя, так как указан в разделе "Включить пользователей".test@contoso.comtest@contoso.com
    • Флаг функции включен для 50% пользователей в группе contoso.com, так как contoso.com указан в разделе "Включить группы" с процентом 50.
    • Этот компонент всегда отключен для всех остальных пользователей, так как процент по умолчанию имеет значение 0.
  8. Нажмите кнопку "Добавить ", чтобы сохранить фильтр целевого назначения.

  9. Нажмите кнопку Применить, чтобы сохранить эти параметры и вернуться на экран Диспетчера компонентов.

  10. Фильтр компонентов для флага компонента теперь отображается как Назначение. Это состояние означает, что флаг компонента будет включен или отключен для каждого запроса в зависимости от критериев, принудительно примененных фильтром компонента назначения.

TargetingFilter в действии

Чтобы увидеть влияние этого флага компонента, выполните сборку и запустите приложение. Изначально элемент Beta не отображается на панели инструментов, так как параметр Процент по умолчанию имеет значение 0.

Теперь войдите как test@contoso.com, используя пароль, заданный при регистрации. Теперь на панели инструментов отображается элемент Beta, так как test@contoso.com указан как целевой пользователь.

Теперь войдите как testuser@contoso.com, используя пароль, заданный при регистрации. Элемент бета-версии не отображается на панели инструментов, так как testuser@contoso.com указан как исключенный пользователь.

В следующем видео показано это поведение в действии.

TargetingFilter in action

Вы можете создать дополнительных пользователей с @contoso.com адресами электронной почты и @contoso-xyz.com просмотреть поведение параметров группы.

Пользователи с contoso-xyz.com адресами электронной почты не увидят бета-элемент . Хотя 50% пользователей с @contoso.com адресами электронной почты увидят бета-элемент , остальные 50% не увидят бета-элемент .

Следующие шаги