Руководство. Развертывание функций для целевых аудиторий в приложении ASP.NET Core
В этом руководстве вы будете использовать фильтр целевого назначения для развертывания функции целевой аудитории для вашего приложения ASP.NET Core. Дополнительные сведения о фильтре целевого назначения см. в статье "Развертывание функций для целевых аудиторий".
Необходимые компоненты
- Учетная запись Azure с активной подпиской. Создайте ее бесплатно.
- Хранилище Конфигурация приложений. Создайте хранилище.
- Флаг компонента с целевым фильтром. Создайте флаг компонента.
- Пакет SDK для .NET версии 6.0 или более поздней версии.
Создание веб-приложения с флагом компонента
В этом разделе вы создадите веб-приложение, которое позволяет пользователям входить и использовать флаг бета-функции , созданный ранее.
Создайте веб-приложение, которое проходит проверку подлинности в локальной базе данных с помощью следующей команды.
dotnet new webapp --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>"
Добавьте Конфигурация приложений Azure и управление функциями в приложение.
Обновите файл Program.cs с помощью следующего кода.
// Existing code in Program.cs // ... ... var builder = WebApplication.CreateBuilder(args); // Retrieve the App Config connection string string AppConfigConnectionString = builder.Configuration.GetConnectionString("AppConfig") ?? throw new InvalidOperationException("Connection string 'AppConfig' not found."); ; // Load feature flag 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 // ... ...
Включите обновление конфигурации и флага компонентов из Конфигурация приложений Azure с помощью по промежуточного слоя Конфигурация приложений.
Обновите 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 // ... ...
Добавьте новую пустую страницу Razor с именем Beta в каталоге Pages. Он включает два файла Beta.cshtml и Beta.cshtml.cs.
@page @model TestFeatureFlags.Pages.BetaModel @{ ViewData["Title"] = "Beta Page"; } <h1>This is the beta website.</h1>
Откройте Beta.cshtml.cs и добавьте
FeatureGate
атрибут вBetaModel
класс.using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.FeatureManagement.Mvc; namespace TestFeatureFlags.Pages { [FeatureGate("Beta")] public class BetaModel : PageModel { public void OnGet() { } } }
Откройте Pages/_ViewImports.cshtml и зарегистрируйте вспомогательный компонент диспетчера функций с помощью директивы
@addTagHelper
.@addTagHelper *, Microsoft.FeatureManagement.AspNetCore
Откройте файл _Layout.cshtml в каталоге Pages/Shared . Вставьте новый тег
<feature>
между пунктами навигации Home и Privacy, как показано ниже.<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3"> <div class="container"> <a class="navbar-brand" asp-area="" asp-page="/Index">TestAppConfigNet3</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse"> <ul class="navbar-nav flex-grow-1"> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a> </li> <feature name="Beta"> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-page="/Beta">Beta</a> </li> </feature> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a> </li> </ul> </div> </div> </nav>
Включение целевого объекта для веб-приложения
Фильтр целевого объекта оценивает состояние функции пользователя на основе контекста целевого пользователя, который включает идентификатор пользователя и группы, к которым принадлежит пользователь. В этом примере вы используете адрес электронной почты пользователя, выполнившего вход, в качестве идентификатора пользователя и доменного имени адреса электронной почты в качестве группы.
Добавьте файл ExampleTargetingContextAccessor.cs со следующим кодом. Интерфейс реализуется
ITargetingContextAccessor
для предоставления контекста целевого объекта для вошедшего пользователя текущего запроса.using Microsoft.FeatureManagement.FeatureFilters; 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 и включите фильтр целевого
WithTargeting
объекта, вызвав метод. Вы передаете типExampleTargetingContextAccessor
, используемый фильтром целевого объекта для получения контекста целевого объекта во время оценки флага компонента. ДобавьтеHttpContextAccessor
в коллекцию служб доступExampleTargetingContextAccessor
к данным пользователя, выполнившего вход, из .HttpContext
// Existing code in Program.cs // ... ... // Add feature management to the container of services builder.Services.AddFeatureManagement() .WithTargeting<ExampleTargetingContextAccessor>(); // Add HttpContextAccessor to the container of services. builder.Services.AddHttpContextAccessor(); // The rest of existing code in Program.cs // ... ...
Примечание.
Сведения о приложениях Blazor см . в инструкциях по включению управления функциями в качестве служб с областью действия.
Назначение фильтра в действии
Выполните сборку приложения и запустите его. Изначально элемент Beta не отображается на панели инструментов, так как параметр Процент по умолчанию имеет значение 0.
Щелкните ссылку "Регистрация " в правом верхнем углу, чтобы создать новую учетную запись пользователя. Используйте адрес электронной почты
test@contoso.com
. На экране Подтверждение регистрации выберите Щелкните здесь, чтобы подтвердить свою учетную запись.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% не увидят бета-элемент .
Следующие шаги
Дополнительные сведения о фильтрах функций см. в следующих руководствах.
Для полного запуска функции библиотеки управления функциями .NET перейдите к следующему документу.