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

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.

  1. Erstellen Sie mithilfe des folgenden Befehls eine Webanwendung, die die Authentifizierung mit einer lokalen Datenbank durchführt.

    dotnet new mvc --auth Individual -o TestFeatureFlags
    
  2. Fügen Sie Verweise auf die folgenden NuGet-Pakete hinzu.

    dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore
    dotnet add package Microsoft.FeatureManagement.AspNetCore
    
  3. Speichern Sie die Verbindungszeichenfolge für Ihren App-Konfigurationsspeicher.

    dotnet user-secrets init
    dotnet user-secrets set ConnectionStrings:AppConfig "<your_connection_string>"
    
  4. 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
    // ... ...
    
  5. 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>
    
  6. Öffnen Sie HomeController.cs unter dem Verzeichnis Controller, und aktualisieren Sie sie mit dem folgenden Code.

    public IActionResult Beta()
    {
        return View();
    }
    
  7. Öffnen Sie _ViewImports.cshtml, und registrieren Sie das Taghilfsprogramm für den Feature-Manager mithilfe einer @addTagHelper-Anweisung:

    @addTagHelper *, Microsoft.FeatureManagement.AspNetCore
    
  8. Ö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>
    
  9. 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.

  10. 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.

  1. 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);
            }
        }
    }
    
  2. Öffnen Sie Program.cs und fügen Sie das im vorangegangenen Schritt erstellte ExampleTargetingContextAccessor und TargetingFilter zur Servicesammlung hinzu, indem Sie die Methode WithTargeting nach der bestehenden Zeile von AddFeatureManagement aufrufen. Jedes Mal, wenn das Feature-Flag ausgewertet wird, verwendet TargetingFilter das ExampleTargetingContextAccessor, 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

  1. Wechseln Sie im Azure-Portal zu Ihrem App Configuration-Speicher, und wählen Sie Feature-Manager aus.

  2. Wählen Sie das Kontextmenü für das Featureflag Beta aus, das Sie im Rahmen der Schnellstartanleitung erstellt haben. Wählen Sie Bearbeiten aus.

    Edit Beta feature flag

  3. Aktivieren Sie im Bildschirm Bearbeiten das Kontrollkästchen Featureflag aktivieren, sofern es nicht bereits aktiviert ist. Aktivieren Sie dann das Kontrollkästchen Featurefilter verwenden.

  4. Wählen Sie die Schaltfläche Erstellen.

  5. Wählen Sie den Zielfilter im Dropdownmenü „Filtertyp“ aus.

  6. Aktivieren Sie die Kontrollkästchen Nach Gruppen überschreiben und Nach Benutzern überschreiben.

  7. 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.

    Conditional feature flag

    Diese Einstellungen führen zu folgendem Verhalten.

    • Das Featureflag ist für den Benutzer testuser@contoso.com immer deaktiviert, weil testuser@contoso.com im Abschnitt Benutzer ausschließen aufgeführt ist.
    • Das Featureflag ist für Benutzer in contoso-xyz.com immer deaktiviert, weil contoso-xyz.com im Abschnitt Gruppen ausschließen aufgeführt ist.
    • Das Featureflag ist für den Benutzer test@contoso.com immer aktiviert, weil test@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.
  8. Wählen Sie Hinzufügen aus, um den Zielfilter zu speichern.

  9. Wählen Sie Anwenden aus, um diese Einstellungen zu speichern und zum Bildschirm Feature-Manager zurückzukehren.

  10. 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:

TargetingFilter in action

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