Tutorial: Bereitstellen von Features für Zielgruppen in einer ASP.NET Core-Anwendung

In diesem Tutorial verwenden Sie den Zielfilter, um eine Funktion für Ihre ASP.NET Core-Anwendung für eine bestimmte Zielgruppe bereitzustellen. Weitere Informationen zum Zielfilter finden Sie unter Rollout von Features für Zielgruppen.

Voraussetzungen

Erstellen einer Webanwendung mit einem Featureflag

In diesem Abschnitt erstellen Sie eine Webanwendung, mit der Benutzer sich anmelden und das Zuvor erstellte Betafeature-Flag verwenden können.

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

    dotnet new webapp --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. Fügen Sie Ihrer Anwendung Azure App Configuration und Featureverwaltung hinzu.

    Aktualisieren Sie die Datei 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") ?? 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
    // ... ...
    
  5. 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
    // ... ...
    
  6. 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>
    
  7. Öffnen Sie Beta.cshtml.cs, und fügen Sie der BetaModel-Klasse ein FeatureGate-Attribut hinzu.

    using Microsoft.AspNetCore.Mvc.RazorPages;
    using Microsoft.FeatureManagement.Mvc;
    
    namespace TestFeatureFlags.Pages
    {
        [FeatureGate("Beta")]
        public class BetaModel : PageModel
        {
            public void OnGet()
            {
            }
        }
    }
    
  8. Ö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
    
  9. Ö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.

  1. 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);
            }
        }
    }
    
  2. Öffnen Sie die Datei Program.cs, und aktivieren Sie den Zielfilter, indem Sie die Methode WithTargeting aufrufen. Sie übergeben den Typ ExampleTargetingContextAccessor, den der Zielfilter verwendet, um den Zielkontext während der Featureflagauswertung abzurufen. Fügen Sie der Dienstauflistung HttpContextAccessor hinzu, um ExampleTargetingContextAccessor zu gestatten, über HttpContext 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

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

    Kein Benutzer bzw. keine Benutzerin angemeldet und Beta-Element wird nicht angezeigt

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

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

    Benutzer bzw. Benutzerin angemeldet und Beta-Element wird angezeigt

    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, da testuser@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 Tutorials fort.

Eine vollständige Übersicht über die .NET-Featureverwaltungsbibliothek finden Sie im folgenden Dokument.