Bereitstellen von Features für Zielgruppen in einer ASP.NET Core-Anwendung
In diesem Leitfaden verwenden Sie den Zielfilter, um ein Feature für Ihre ASP.NET Core-Anwendung für bestimmte Zielgruppen bereitzustellen. Weitere Informationen zum Zielfilter finden Sie unter Rollout von Features für Zielgruppen.
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement. Erstellen Sie ein kostenloses Konto.
- Ein App Configuration-Speicher. Erstellen Sie einen Speicher.
- Ein Featureflag mit Zielfilter Erstellen Sie das Featureflag.
- .NET SDK 6.0 oder höher.
Erstellen einer Webanwendung mit einem Featureflag
In diesem Abschnitt erstellen Sie eine Webanwendung, mit der Benutzende sich anmelden und das zuvor erstellte Featureflag Beta verwenden können.
Erstellen Sie mithilfe des folgenden Befehls eine Webanwendung, die die Authentifizierung mit einer lokalen Datenbank durchführt.
dotnet new webapp --auth Individual -o TestFeatureFlags
Navigieren Sie zum neu erstellten Verzeichnis TestFeatureFlags, und fügen Sie Verweise auf die folgenden NuGet-Pakete hinzu.
dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore dotnet add package Microsoft.FeatureManagement.AspNetCore dotnet add package Azure.Identity
Erstellen Sie ein Benutzergeheimnis für die Anwendung, indem Sie die folgenden Befehle ausführen.
Der Befehl verwendet den Geheimnis-Manager, um ein Geheimnis namens
Endpoints:AppConfiguration
zu speichern, das den Endpunkt für Ihren App Configuration-Speicher speichert. Ersetzen Sie den Platzhalter<your-App-Configuration-endpoint>
durch den Endpunkt Ihres App Configuration-Speichers. Sie finden den Endpunkt im Bereich Übersicht Ihres App Configuration-Speichers im Azure-Portal.dotnet user-secrets init dotnet user-secrets set Endpoints:AppConfiguration "<your-App-Configuration-endpoint>"
Fügen Sie Ihrer Anwendung Azure App Configuration und Featureverwaltung hinzu.
Sie verwenden die
DefaultAzureCredential
für die Authentifizierung beim App Configuration-Speicher. Befolgen Sie die Anweisungen, um Ihre Anmeldeinformationen der Rolle App Configuration-Datenleser zuzuweisen. Achten Sie darauf, ausreichend Zeit für die Verteilung der Berechtigung zu warten, bevor Sie Ihre Anwendung ausführen.Aktualisieren Sie die Datei Program.cs mit dem folgenden Code:
// 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 // ... ...
Aktivieren Sie die Aktualisierung von Konfigurations- und Featureflags in Azure App Configuration mit der App Configuration-Middleware.
Aktualisieren Sie Program.cs mit dem folgenden Code:
// 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 // ... ...
Fügen Sie eine neue leere Razor-Seite namens Beta unter dem Verzeichnis „Pages“ hinzu. Sie enthält zwei Dateien Beta.cshtml und Beta.cshtml.cs.
@page @model TestFeatureFlags.Pages.BetaModel @{ ViewData["Title"] = "Beta Page"; } <h1>This is the beta website.</h1>
Öffnen Sie die Datei Beta.cshtml.cs, und fügen Sie der
BetaModel
-Klasse dasFeatureGate
-Attribut hinzu.using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.FeatureManagement.Mvc; namespace TestFeatureFlags.Pages { [FeatureGate("Beta")] public class BetaModel : PageModel { public void OnGet() { } } }
Öffnen Sie die Datei Pages/_ViewImports.cshtml, und registrieren Sie das Taghilfsprogramm für den Feature-Manager mithilfe einer
@addTagHelper
-Anweisung:@addTagHelper *, Microsoft.FeatureManagement.AspNetCore
Öffnen Sie _Layout.cshtml im Verzeichnis Pages/Shared. Fügen Sie ein neues
<feature>
-Tag zwischen den Navigationsleistenelementen Start und Datenschutz ein, wie nachfolgend in den hervorgehobenen Zeilen gezeigt:<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>
Aktivieren der Zielbestimmung für die Webanwendung
Der Zielfilter bewertet den Featurestatus eines Benutzers bzw. einer Benutzerin basierend auf dem Benutzeradressierungskontext, der die Benutzer-ID und die Gruppen umfasst, zu denen der Benutzer bzw. die Benutzerin gehört. In diesem Beispiel verwenden Sie die E-Mail-Adresse des angemeldeten Benutzerkontos als Benutzer-ID und den Domänennamen der E-Mail-Adresse als Gruppe.
Fügen Sie eine Datei namens ExampleTargetingContextAccessor.cs mit dem folgenden Code hinzu. Sie implementieren die
ITargetingContextAccessor
-Schnittstelle, um den Zielkontext für den angemeldeten Benutzer bzw. die angemeldete Benutzerin der aktuellen Anforderung bereitzustellen.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); } } }
Öffnen Sie die Datei Program.cs, und aktivieren Sie den Zielfilter, indem Sie die Methode
WithTargeting
aufrufen. Sie übergeben den TypExampleTargetingContextAccessor
, den der Zielfilter verwendet, um den Zielkontext während der Featureflagauswertung abzurufen. Fügen Sie der DienstauflistungHttpContextAccessor
hinzu, umExampleTargetingContextAccessor
zu gestatten, überHttpContext
auf die Informationen des angemeldeten Benutzerkontos zuzugreifen.// 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 // ... ...
Hinweis
Lesen Sie für Blazor-Anwendungen die Anweisungen zum Aktivieren der Featureverwaltung als Bereichsdienste.
Zielfilter in Aktion
Erstellen Sie die Anwendung, und führen Sie sie aus. Anfänglich wird das Beta-Element nicht in der Symbolleiste angezeigt, weil die Option Standardprozentsatz auf 0 festgelegt ist.
Wählen Sie den Link Registrieren in der rechten oberen Ecke aus, um ein neues Benutzerkonto zu erstellen. Verwenden Sie eine E-Mail-Adresse wie
test@contoso.com
. Wählen Sie im Bildschirm Registrierungsbestätigung die Option Hier klicken, um Ihr Konto zu bestätigen.Melden Sie sich jetzt als
test@contoso.com
mit dem Kennwort an, das Sie bei der Registrierung festgelegt haben.Das Beta-Element wird jetzt in der Symbolleiste angezeigt, weil
test@contoso.com
als Zielbenutzer angegeben ist.Melden Sie sich jetzt als
testuser@contoso.com
mit dem Kennwort an, das Sie bei der Registrierung des Kontos festgelegt haben. Das Element Beta wird nicht auf der Symbolleiste angezeigt, datestuser@contoso.com
als ausgeschlossener Benutzer angegeben wird.Sie können weitere Benutzer mit E-Mail-Adressen bei
@contoso.com
und@contoso-xyz.com
erstellen, um das Verhalten der Gruppeneinstellungen anzuzeigen.Benutzer mit E-Mail-Adressen vom Typ
contoso-xyz.com
wird das Element Beta nicht angezeigt. Während 50 % der Benutzer*innen mit E-Mail-Adressen vom Typ@contoso.com
das Element Beta sehen, sehen die anderen 50 % das Element Beta nicht.
Nächste Schritte
Wenn Sie mehr über die Featurefilter erfahren möchten, fahren Sie mit den folgenden Dokumenten fort.
Eine vollständige Übersicht über die .NET-Featureverwaltungsbibliothek finden Sie im folgenden Dokument.