Share via


Zelfstudie: Functies implementeren voor doelgroepen in een ASP.NET Core-toepassing

In deze zelfstudie gebruikt u het doelfilter om een functie uit te rollen voor uw ASP.NET Core-toepassing. Zie Functies implementeren voor doelgroepen voor meer informatie over het doelfilter.

Vereisten

Een webtoepassing maken met een functievlag

In deze sectie maakt u een webtoepassing waarmee gebruikers zich kunnen aanmelden en de bètafunctievlag kunnen gebruiken die u eerder hebt gemaakt.

  1. Maak een webtoepassing die wordt geverifieerd voor een lokale database met behulp van de volgende opdracht.

    dotnet new webapp --auth Individual -o TestFeatureFlags
    
  2. Voeg verwijzingen toe naar de volgende NuGet-pakketten.

    dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore
    dotnet add package Microsoft.FeatureManagement.AspNetCore
    
  3. Sla de verbindingsreeks op voor uw App Configuration-archief.

    dotnet user-secrets init
    dotnet user-secrets set ConnectionStrings:AppConfig "<your_connection_string>"
    
  4. Voeg Azure-app configuratie- en functiebeheer toe aan uw toepassing.

    Werk het Program.cs-bestand bij met de volgende 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. Schakel het vernieuwen van configuratie- en functievlagken in vanuit Azure-app Configuration met de App Configuration-middleware.

    Werk Program.cs bij met de volgende 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. Voeg een nieuwe lege Razor-pagina toe met de naam Beta onder de map Pagina's. Het bevat twee bestanden Beta.cshtml en Beta.cshtml.cs.

    @page
    @model TestFeatureFlags.Pages.BetaModel
    @{
        ViewData["Title"] = "Beta Page";
    }
    
    <h1>This is the beta website.</h1>
    
  7. Open Beta.cshtml.cs en voeg het kenmerk toe FeatureGate aan de BetaModel klasse.

    using Microsoft.AspNetCore.Mvc.RazorPages;
    using Microsoft.FeatureManagement.Mvc;
    
    namespace TestFeatureFlags.Pages
    {
        [FeatureGate("Beta")]
        public class BetaModel : PageModel
        {
            public void OnGet()
            {
            }
        }
    }
    
  8. Open Pages/_ViewImports.cshtml en registreer de Tag Helper voor functiebeheer met behulp van een @addTagHelper instructie.

    @addTagHelper *, Microsoft.FeatureManagement.AspNetCore
    
  9. Open _Layout.cshtml in de map Pages/Shared . Voeg een nieuwe tag <feature> in tussen de navigatiebalkitems Start en Privacy, zoals wordt weergegeven in de gemarkeerde regels hieronder.

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

Targeting inschakelen voor de webtoepassing

Het doelfilter evalueert de functiestatus van een gebruiker op basis van de doelcontext van de gebruiker, die bestaat uit de gebruikers-id en de groepen waartoe de gebruiker behoort. In dit voorbeeld gebruikt u het e-mailadres van de aangemelde gebruiker als de gebruikers-id en de domeinnaam van het e-mailadres als groep.

  1. Voeg een ExampleTargetingContextAccessor.cs-bestand toe met de volgende code. U implementeert de ITargetingContextAccessor interface om de doelcontext te bieden voor de aangemelde gebruiker van de huidige aanvraag.

    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. Open het Program.cs-bestand en schakel het doelfilter in door de methode aan te WithTargeting roepen. U geeft het type ExampleTargetingContextAccessor door dat door het doelfilter wordt gebruikt om de doelcontext op te halen tijdens de evaluatie van de functievlag. Voeg toe HttpContextAccessor aan de serviceverzameling om toegang te krijgen ExampleTargetingContextAccessor tot de aangemelde gebruikersgegevens van de HttpContext.

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

Doelfilter in actie

  1. Maak de toepassing en voer deze uit. In eerste instantie wordt het bèta-item niet weergegeven op de werkbalk, omdat de optie Standaardpercentage is ingesteld op 0.

    Gebruiker niet aangemeld en bèta-item niet weergegeven

  2. Selecteer de koppeling Registreren in de rechterbovenhoek om een nieuw gebruikersaccount te maken. Gebruik een e-mailadres van test@contoso.com. Selecteer op het scherm Bevestiging registreren de optie Klik hier om uw account te bevestigen.

  3. Meld u aan als test@contoso.com, met het wachtwoord dat u hebt ingesteld bij het registreren van het account.

    Het bèta-item wordt nu weergegeven op de werkbalk, omdat test@contoso.com het is opgegeven als doelgebruiker.

    Gebruiker aangemeld en bèta-item weergegeven

    Meld u nu aan als testuser@contoso.com, met het wachtwoord dat u hebt ingesteld bij het registreren van het account. Het bèta-item wordt niet weergegeven op de werkbalk, omdat testuser@contoso.com het is opgegeven als een uitgesloten gebruiker.

    U kunt meer gebruikers met @contoso.com en @contoso-xyz.com e-mailadressen maken om het gedrag van de groepsinstellingen te bekijken.

    Gebruikers met contoso-xyz.com e-mailadressen zien het bèta-item niet. Hoewel 50% van de gebruikers met @contoso.com e-mailadressen het bèta-item ziet, ziet de andere 50% het bèta-item niet.

Volgende stappen

Ga verder met de volgende zelfstudies voor meer informatie over de functiefilters.