Déployer des fonctionnalités pour des publics ciblés dans une application ASP.NET Core
Dans ce guide, vous utilisez le filtre de ciblage pour déployer une fonctionnalité sur des publics ciblés pour votre application ASP.NET Core. Pour plus d’informations sur le filtre de ciblage, consultez Déployer des fonctionnalités pour les audiences ciblées.
Prérequis
- Compte Azure avec un abonnement actif. Créez-en un gratuitement.
- Un magasin App Configuration. Créez un magasin.
- Un indicateur de caractéristiques avec un filtre de ciblage. Créer l’indicateur de fonctionnalité.
- .NET SDK 6.0 ou version ultérieure.
Créez une application web avec un indicateur de fonctionnalité
Dans cette section, vous créez une application web qui permet aux utilisateurs de se connecter et d’utiliser l’indicateur de fonctionnalité Bêta que vous avez créé précédemment.
Créez une application web qui s’authentifie auprès d’une base de données locale en tirant parti de la commande suivante.
dotnet new webapp --auth Individual -o TestFeatureFlags
Accédez au répertoire TestFeatureFlags nouvellement créé et ajoutez des références aux packages NuGet suivants.
dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore dotnet add package Microsoft.FeatureManagement.AspNetCore dotnet add package Azure.Identity
Créez un secret utilisateur pour l’application en exécutant les commandes suivantes.
La commande utilise le Gestionnaire de secrets pour stocker un secret nommé
Endpoints:AppConfiguration
, qui stocke le point de terminaison de votre magasin App Configuration. Remplacez l’espace réservé<your-App-Configuration-endpoint>
par le point de terminaison de votre magasin App Configuration. Le point de terminaison se trouve dans le panneau Vue d’ensemble de votre magasin App Configuration dans le portail Azure.dotnet user-secrets init dotnet user-secrets set Endpoints:AppConfiguration "<your-App-Configuration-endpoint>"
Ajoutez Azure App Configuration et la gestion des fonctionnalités à votre application.
Vous utilisez le
DefaultAzureCredential
pour vous authentifier auprès de votre magasin App Configuration. Suivez les instructions pour attribuer à votre identifiant le rôle de lecteur de données de configuration de l'application. Veillez à laisser suffisamment de temps pour que l’autorisation se propage avant d’exécuter votre application.Mettez à jour le fichier Program.cs avec le code suivant.
// Existing code in Program.cs // ... ... using Azure.Identity; var builder = WebApplication.CreateBuilder(args); // Retrieve the endpoint string endpoint = builder.Configuration.GetValue<string>("Endpoints:AppConfiguration") ?? throw new InvalidOperationException("The setting `Endpoints:AppConfiguration` was not found."); // Connect to Azure App Configuration and load all feature flags with no label builder.Configuration.AddAzureAppConfiguration(options => { options.Connect(new Uri(endpoint), new DefaultAzureCredential()) .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 // ... ...
Activer le rafraîchissement de la configuration et des indicateurs de fonctionnalités à partir d’Azure App Configuration avec l'intergiciel App Configuration.
Mettez à jour Program.cs avec le code suivant.
// 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 // ... ...
Ajoutez une nouvelle page Razor vide nommée Beta sous le répertoire Pages. Ce dernier comprend deux fichiers, Beta.cshtml et Beta.cshtml.cs.
@page @model TestFeatureFlags.Pages.BetaModel @{ ViewData["Title"] = "Beta Page"; } <h1>This is the beta website.</h1>
Ouvrez Beta.cshtml.cs et ajoutez l’attribut
FeatureGate
à la classeBetaModel
.using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.FeatureManagement.Mvc; namespace TestFeatureFlags.Pages { [FeatureGate("Beta")] public class BetaModel : PageModel { public void OnGet() { } } }
Ouvrez Pages/_ViewImports.cshtml, puis inscrivez le Tag Helper du gestionnaire de fonctionnalités à l’aide d’une directive
@addTagHelper
.@addTagHelper *, Microsoft.FeatureManagement.AspNetCore
Ouvrez _Layout.cshtml dans le répertoire Pages/ partagé. Insérez une étiquette
<feature>
entre les éléments Accueil et Confidentialité de la barre de navigation, comme indiqué dans les lignes signalées ci-dessous.<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>
Activer le ciblage pour l'application web
Le filtre de ciblage évalue l'état de la fonctionnalité d'un utilisateur en fonction du contexte de ciblage de l'utilisateur, qui comprend l'identifiant de l'utilisateur et les groupes auxquels il appartient. Dans cet exemple, vous utilisez l’adresse e-mail de l’utilisateur connecté comme identifiant utilisateur et le nom de domaine de l’adresse e-mail comme groupe.
Ajoutez un fichier ExampleTargetingContextAccessor.cs avec le code suivant. Vous implémentez l’interface
ITargetingContextAccessor
pour fournir le contexte de ciblage de l’utilisateur connecté de la requête actuelle.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); } } }
Ouvrez le fichier Program.cs et activez le filtre de ciblage en appelant la méthode
WithTargeting
. Vous transmettez le typeExampleTargetingContextAccessor
que le filtre de ciblage utilisera pour obtenir le contexte de ciblage pendant l’évaluation de l’indicateur de fonctionnalité. AjoutezHttpContextAccessor
à la collection de services pour autoriserExampleTargetingContextAccessor
à accéder aux informations utilisateur connectées à partir duHttpContext
.// 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 // ... ...
Remarque
Pour les applications Blazor, consultez les instructions pour activer la gestion de fonctionnalités comme services étendus.
Filtre de ciblage en action
Générez et exécutez l’application. Au départ, l’élément Bêta n’apparaît pas dans la barre d’outils, car l’option Pourcentage par défaut est définie sur 0.
Sélectionnez le lien S’inscrire dans le coin supérieur droit pour créer un compte d’utilisateur. Utilisez une adresse e-mail de
test@contoso.com
. Dans l’écran Confirmation de l’inscription, sélectionnez Cliquez ici pour confirmer votre compte.Connectez-vous en tant que
test@contoso.com
, en utilisant le mot de passe que vous avez défini lors de l’inscription du compte.L’élément Bêta apparaît désormais dans la barre d’outils, car
test@contoso.com
est spécifié en tant qu’utilisateur ciblé.Connectez-vous maintenant en tant que
testuser@contoso.com
, en utilisant le mot de passe que vous avez défini lors de l’inscription du compte. L’élément bêta n’apparaît pas dans la barre d’outils, cartestuser@contoso.com
est spécifié en tant qu’utilisateur exclu.Vous pouvez créer d’autres utilisateurs avec des adresses e-mail
@contoso.com
et@contoso-xyz.com
pour voir le comportement des paramètres de groupe.Les utilisateurs avec des adresses e-mail
contoso-xyz.com
ne verront pas l’élément Bêta. Alors que 50 % des utilisateurs avec des adresses e-mail@contoso.com
verront l’élément bêta, les autres 50 % ne verront pas l’élément bêta.
Étapes suivantes
Pour en savoir plus sur les filtres de fonctionnalités, consultez les documents suivants.
Pour obtenir la liste complète des fonctionnalités de la bibliothèque de gestion des fonctionnalités .NET, passez au document suivant.