Aktivieren des gestaffelten Rollouts von Features für Zielgruppen
Die Zielbestimmung ist eine Featureverwaltungsstrategie, mit der Entwickler neue Features schrittweise für ihre Benutzerbasis bereitstellen können. Die Strategie basiert auf dem Konzept der Zielgruppenadressierung einer Gruppe von Benutzern, die als Zielgruppe bezeichnet werden. Eine Benutzergruppe besteht aus bestimmten Benutzern, Gruppen und einem bestimmten Prozentsatz der gesamten Benutzerbasis.
Die Benutzer können tatsächliche Benutzerkonten sein, sie können aber auch Computer, Geräte oder alle eindeutig identifizierbaren Entitäten sein, für die Sie ein Feature bereitstellen möchten.
Die Gruppen sind bis zu Ihrer Anwendung, die definiert werden soll. Wenn Sie beispielsweise auf Benutzerkonten abzielen, können Sie Microsoft Entra-Gruppen oder -Gruppen verwenden, die Benutzerspeicherorte angeben. Bei der Zielbestimmung von Computern können Sie sie basierend auf Rolloutphasen gruppieren. Gruppen können alle gängigen Attribute sein, auf deren Grundlage Sie Ihre Zielgruppe kategorisieren möchten.
In diesem Artikel erfahren Sie, wie Sie ein neues Feature in einer ASP.NET Core-Webanwendung für bestimmte Benutzer und Gruppen mithilfe von TargetingFilter
mit Azure App Configuration einführen.
Voraussetzungen
- Schließen Sie Schnellstart: Hinzufügen von Funktionsflags zu einer ASP.NET Core-App ab.
- Aktualisieren Sie das
Microsoft.FeatureManagement.AspNetCore
-Paket auf Version 3.0.0 oder höher.
Erstellen Sie eine Webanwendung mit Authentifizierung und Funktionsmerkmalen
In diesem Abschnitt erstellen Sie eine Webanwendung, mit der Benutzer sich anmelden und das Zuvor erstellte Betafeature-Flag verwenden können. Die meisten Schritte sind sehr ähnlich wie in der Schnellstartanleitung.
Erstellen Sie mithilfe des folgenden Befehls eine Webanwendung, die die Authentifizierung mit einer lokalen Datenbank durchführt.
dotnet new mvc --auth Individual -o TestFeatureFlags
Fügen Sie Verweise auf die folgenden NuGet-Pakete hinzu.
dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore dotnet add package Microsoft.FeatureManagement.AspNetCore
Speichern Sie die Verbindungszeichenfolge für Ihren App-Konfigurationsspeicher.
dotnet user-secrets init dotnet user-secrets set ConnectionStrings:AppConfig "<your_connection_string>"
Aktualisieren Sie Program.cs mit dem folgenden Code:
// 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 // ... ...
Fügen Sie Beta.cshtml unter dem Verzeichnis Views\Home hinzu, und aktualisieren Sie es mit dem folgenden Markup.
@{ ViewData["Title"] = "Beta Page"; } <h1>This is the beta website.</h1>
Öffnen Sie HomeController.cs unter dem Verzeichnis Controller, und aktualisieren Sie sie mit dem folgenden Code.
public IActionResult Beta() { return View(); }
Öffnen Sie _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 Ansichten/Freigegeben. Fügen Sie ein neues
<feature>
Tag zwischen den Navigationsleistenelementen Start und Datenschutz ein.<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>
Erstellen Sie das Modell dann, und führen Sie es aus. Wählen Sie dann 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.Schalten Sie das Featureflag in App Configuration um. Überprüfen Sie, ob durch diese Aktion die Sichtbarkeit des Beta-Elements in der Navigationsleiste gesteuert wird.
Aktualisieren des zu verwendenden Webanwendungscodes TargetingFilter
An diesem Punkt können Sie das Featureflag verwenden, um das Beta
-Feature für alle Benutzer zu aktivieren oder zu deaktivieren. Um das Featureflag für einige Benutzer zu aktivieren, während es für andere deaktiviert wird, aktualisieren Sie Ihren Code so, dass er TargetingFilter
verwendet. In diesem Beispiel verwenden Sie die E-Mail-Adresse des angemeldeten Benutzers als Benutzer-ID und den Domänennamensteil der E-Mail-Adresse als Gruppe. Sie fügen den Benutzer und die Gruppe dem TargetingContext
hinzu. Der TargetingFilter
verwendet diesen Kontext für jede Anforderung, um den Zustand des Featureflags zu bestimmen.
Fügen Sie ExampleTargetingContextAccessor.cs Datei hinzu.
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); } } }
Öffnen Sie
Program.cs
und fügen Sie das im vorangegangenen Schritt erstellteExampleTargetingContextAccessor
undTargetingFilter
zur Servicesammlung hinzu, indem Sie die MethodeWithTargeting
nach der bestehenden Zeile vonAddFeatureManagement
aufrufen. Jedes Mal, wenn das Feature-Flag ausgewertet wird, verwendetTargetingFilter
dasExampleTargetingContextAccessor
, um den Zielkontext zu bestimmen.// 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 // ... ...
Hinweis
Lesen Sie für Blazor-Anwendungen die Anweisungen zum Aktivieren der Featureverwaltung als Bereichsdienste.
Aktualisieren des Featureflags für die Verwendung von TargetingFilter
Wechseln Sie im Azure-Portal zu Ihrem App Configuration-Speicher, und wählen Sie Feature-Manager aus.
Wählen Sie das Kontextmenü für das Featureflag Beta aus, das Sie im Rahmen der Schnellstartanleitung erstellt haben. Wählen Sie Bearbeiten aus.
Aktivieren Sie im Bildschirm Bearbeiten das Kontrollkästchen Featureflag aktivieren, sofern es nicht bereits aktiviert ist. Aktivieren Sie dann das Kontrollkästchen Featurefilter verwenden.
Wählen Sie die Schaltfläche Erstellen.
Wählen Sie den Zielfilter im Dropdownmenü „Filtertyp“ aus.
Aktivieren Sie die Kontrollkästchen Nach Gruppen überschreiben und Nach Benutzern überschreiben.
Wählen Sie die folgenden Optionen aus.
- Standardprozentsatz: 0
- Gruppen einschließen: Geben Sie unter Name den Namen contoso.com und einen Prozentsatz von 50 ein.
- Gruppen ausschließen:
contoso-xyz.com
- Benutzer einschließen:
test@contoso.com
- Benutzer ausschließen:
testuser@contoso.com
Der Funktionsfilterbildschirm sieht wie folgt aus.
Diese Einstellungen führen zu folgendem Verhalten.
- Das Featureflag ist für den Benutzer
testuser@contoso.com
immer deaktiviert, weiltestuser@contoso.com
im Abschnitt Benutzer ausschließen aufgeführt ist. - Das Featureflag ist für Benutzer in
contoso-xyz.com
immer deaktiviert, weilcontoso-xyz.com
im Abschnitt Gruppen ausschließen aufgeführt ist. - Das Featureflag ist für den Benutzer
test@contoso.com
immer aktiviert, weiltest@contoso.com
im Abschnitt Benutzer einschließen aufgeführt ist. - Das Featureflag ist für 50 % der Benutzer*innen in der Gruppe contoso.com aktiviert, weil contoso.com im Abschnitt Gruppen einschließen mit einem Prozentsatz von 50 aufgeführt ist.
- Das Feature ist für alle anderen Benutzer immer deaktiviert, weil der Standardprozentsatz auf 0 festgelegt ist.
Wählen Sie Hinzufügen aus, um den Zielfilter zu speichern.
Wählen Sie Anwenden aus, um diese Einstellungen zu speichern und zum Bildschirm Feature-Manager zurückzukehren.
Der Featurefilter wird für das Featureflag nun als Targeting (Zielgruppenadressierung) angezeigt. Dieser Zustand gibt an, dass das Featureflag anforderungsspezifisch auf der Grundlage der Kriterien des Featurefilters Targeting aktiviert oder deaktiviert wird.
„TargetingFilter“ in Aktion
Um die Auswirkungen dieses Featureflags zu sehen, 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.
Melden Sie sich jetzt mit dem Kennwort, das Sie bei der Registrierung festgelegt haben, als test@contoso.com
an. Das Beta-Element wird jetzt in der Symbolleiste angezeigt, weil test@contoso.com
als Zielbenutzer angegeben ist.
Melden Sie sich jetzt mit dem Kennwort, das Sie bei der Registrierung festgelegt haben, als testuser@contoso.com
an. Das Element Beta wird nicht auf der Symbolleiste angezeigt, da testuser@contoso.com
als ausgeschlossener Benutzer angegeben wird.
Das folgende Video zeigt dieses Verhalten:
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.