Включение поэтапного развертывания функций для определенных аудиторий
Цель — это стратегия управления функциями, которая позволяет разработчикам постепенно развертывать новые функции в своей пользовательской базе. Стратегия основана на концепции целевой аудитории для набора пользователей, известных как целевая аудитория. Аудитория состоит из определенных пользователей, групп и указанного процента всей базы пользователей.
Пользователи могут быть фактическими учетными записями пользователей, но они также могут быть компьютерами, устройствами или любыми уникальными сущностями, в которых требуется развернуть функцию.
Группы относятся к приложению для определения. Например, при выборе учетных записей пользователей можно использовать группы или группы Microsoft Entra, обозначающие расположения пользователей. При выборе целевых компьютеров их можно сгруппировать на основе этапов развертывания. Группы могут быть любыми общими атрибутами, на основе которых вы хотите классифицировать аудиторию.
В этой статье вы узнаете, как развернуть новую функцию в веб-приложении ASP.NET Core для указанных пользователей и групп, использующих TargetingFilter
Конфигурация приложений Azure.
Необходимые компоненты
- Завершите краткое руководство. Добавление флагов функций в приложение ASP.NET Core.
Microsoft.FeatureManagement.AspNetCore
Обновите пакет до версии 3.0.0 или более поздней.
Создание веб-приложения с флагами проверки подлинности и компонентов
В этом разделе вы создадите веб-приложение, которое позволяет пользователям входить и использовать флаг бета-функции , созданный ранее. Большинство шагов очень похожи на то, что вы сделали в кратком руководстве.
Создайте веб-приложение, которое проходит проверку подлинности в локальной базе данных с помощью следующей команды.
dotnet new mvc --auth Individual -o TestFeatureFlags
Добавьте ссылки на следующие пакеты NuGet.
dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore dotnet add package Microsoft.FeatureManagement.AspNetCore
Сохраните строка подключения для вашего хранилища Конфигурация приложений.
dotnet user-secrets init dotnet user-secrets set ConnectionStrings:AppConfig "<your_connection_string>"
Обновите Program.cs с помощью следующего кода.
// Existing code in Program.cs // ... ... var builder = WebApplication.CreateBuilder(args); // Retrieve the App Config connection string string AppConfigConnectionString = builder.Configuration.GetConnectionString("AppConfig"); // Load configuration from Azure App Configuration builder.Configuration.AddAzureAppConfiguration(options => { options.Connect(AppConfigConnectionString); options.UseFeatureFlags(); }); // Add Azure App Configuration middleware to the container of services builder.Services.AddAzureAppConfiguration(); // Add feature management to the container of services builder.Services.AddFeatureManagement(); // The rest of existing code in Program.cs // ... ...
// Existing code in Program.cs // ... ... var app = builder.Build(); // Use Azure App Configuration middleware for dynamic configuration refresh app.UseAzureAppConfiguration(); // The rest of existing code in Program.cs // ... ...
Добавьте Beta.cshtml в каталог Views\Home и обновите его с помощью следующей разметки.
@{ ViewData["Title"] = "Beta Page"; } <h1>This is the beta website.</h1>
Откройте HomeController.cs в каталоге контроллеров и обновите его следующим кодом.
public IActionResult Beta() { return View(); }
Откройте файл _ViewImports.cshtml и зарегистрируйте вспомогательный компонент диспетчера функций с помощью директивы
@addTagHelper
:@addTagHelper *, Microsoft.FeatureManagement.AspNetCore
Откройте файл _Layout.cshtml в каталоге Views\Shared. Вставьте новый
<feature>
тег между элементами панели навигации " Главная " и "Конфиденциальность ".<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between"> <ul class="navbar-nav flex-grow-1"> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a> </li> <feature name="Beta"> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Beta">Beta</a> </li> </feature> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a> </li> </ul> <partial name="_LoginPartial" /> </div>
Выполните сборку и запуск. Затем щелкните ссылку "Регистрация" в правом верхнем углу, чтобы создать новую учетную запись пользователя. Используйте адрес электронной почты
test@contoso.com
. На экране Подтверждение регистрации выберите Щелкните здесь, чтобы подтвердить свою учетную запись.Переключите флаг компонента в Конфигурации приложений. Проверьте, что это действие управляет видимостью элемента Beta на панели навигации.
Обновление кода веб-приложения для использования TargetingFilter
На этом этапе можно использовать флаг компонента, чтобы включить или отключить компонент Beta
для всех пользователей. Чтобы включить флаг компонента для некоторых пользователей и отключить его для других, обновите код для использования TargetingFilter
. В этом примере вы используете адрес электронной почты вошедшего пользователя в качестве идентификатора пользователя и часть домена адреса электронной почты в качестве группы. Вы добавляете пользователя и группу в объект TargetingContext
. TargetingFilter
использует этот контекст для определения состояния флага компонента для каждого запроса.
Добавьте файл ExampleTargetingContextAccessor.cs .
using Microsoft.AspNetCore.Http; using Microsoft.FeatureManagement.FeatureFilters; using System; using System.Collections.Generic; using System.Threading.Tasks; namespace TestFeatureFlags { public class ExampleTargetingContextAccessor : ITargetingContextAccessor { private const string TargetingContextLookup = "ExampleTargetingContextAccessor.TargetingContext"; private readonly IHttpContextAccessor _httpContextAccessor; public ExampleTargetingContextAccessor(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); } } }
Откройте
Program.cs
и добавьтеExampleTargetingContextAccessor
созданный на предыдущем шаге иTargetingFilter
в коллекцию служб путем вызоваWithTargeting
метода после существующей строкиAddFeatureManagement
. ОнTargetingFilter
будет использоватьExampleTargetingContextAccessor
для определения контекста целевого объекта при каждом вычислении флага компонента.// Existing code in Program.cs // ... ... // Add feature management to the container of services builder.Services.AddFeatureManagement() .WithTargeting<ExampleTargetingContextAccessor>(); // The rest of existing code in Program.cs // ... ...
Примечание.
Для приложений Blazor см. инструкции по включению управления функциями в качестве область служб.
Обновление флага компонента для использования TargetingFilter
На портале Azure перейдите к хранилищу Конфигурации приложений и выберите Диспетчер компонентов.
Выберите контекстное меню для флага компонента Beta, созданного в кратком руководстве. Выберите Изменить.
На экране редактирования установите флажок Включить флаг компонента, если он еще не установлен. Затем установите флажок Использовать фильтр компонентов.
Выберите кнопку Создать.
Выберите фильтр целевого назначения в раскрывающемся списке типа фильтра.
Выберите переопределение по группам и переопределить пользователями проверка box.
Выберите следующие параметры.
- Значение в процентах по умолчанию: 0
- Включить группы: введите имяcontoso.com и процент50
- Исключить группы:
contoso-xyz.com
- Включить пользователей:
test@contoso.com
- Исключите пользователей:
testuser@contoso.com
Экран фильтра функций будет выглядеть следующим образом.
Эти параметры приводят к следующему поведению.
- Флаг функции всегда отключен для пользователя, так как указан в разделе "Исключить пользователей".
testuser@contoso.com
testuser@contoso.com
- Флаг компонента всегда отключен для пользователей в
contoso-xyz.com
contoso-xyz.com
разделе "Исключения групп". - Флаг функции всегда включен для пользователя, так как указан в разделе "Включить пользователей".
test@contoso.com
test@contoso.com
- Флаг функции включен для 50% пользователей в группе contoso.com, так как contoso.com указан в разделе "Включить группы" с процентом 50.
- Этот компонент всегда отключен для всех остальных пользователей, так как процент по умолчанию имеет значение 0.
Нажмите кнопку "Добавить ", чтобы сохранить фильтр целевого назначения.
Нажмите кнопку Применить, чтобы сохранить эти параметры и вернуться на экран Диспетчера компонентов.
Фильтр компонентов для флага компонента теперь отображается как Назначение. Это состояние указывает, что флаг компонента включен или отключен на основе каждого запроса на основе критериев, применяемых фильтром функций целевого назначения .
TargetingFilter в действии
Чтобы увидеть влияние этого флага компонента, выполните сборку и запустите приложение. Изначально элемент Beta не отображается на панели инструментов, так как параметр Процент по умолчанию имеет значение 0.
Теперь войдите как test@contoso.com
, используя пароль, заданный при регистрации. Теперь на панели инструментов отображается элемент Beta, так как test@contoso.com
указан как целевой пользователь.
Теперь войдите как testuser@contoso.com
, используя пароль, заданный при регистрации. Элемент бета-версии не отображается на панели инструментов, так как testuser@contoso.com
указан как исключенный пользователь.
В следующем видео показано это поведение в действии.
Вы можете создать больше пользователей с @contoso.com
адресами электронной почты и @contoso-xyz.com
просмотреть поведение параметров группы.
Пользователи с contoso-xyz.com
адресами электронной почты не увидят бета-элемент . Хотя 50% пользователей с @contoso.com
адресами электронной почты увидят бета-элемент , остальные 50% не увидят бета-элемент .