Freigeben über


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

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.

  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. 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
    
  3. 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>"
    
  4. Fügen Sie Ihrer Anwendung Azure App Configuration und Featureverwaltung hinzu.

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

    2. 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
      // ... ...
      
  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 die Datei Beta.cshtml.cs, und fügen Sie der BetaModel-Klasse das 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 Dokumenten fort.

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