Delen via


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

In deze handleiding gebruikt u het doelfilter om een functie uit te rollen voor doelgroepen 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. Navigeer naar de zojuist gemaakte TestFeatureFlags-map en voeg verwijzingen toe aan de volgende NuGet-pakketten.

    dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore
    dotnet add package Microsoft.FeatureManagement.AspNetCore
    dotnet add package Azure.Identity
    
  3. Maak een gebruikersgeheim voor de toepassing door de volgende opdrachten uit te voeren.

    De opdracht maakt gebruik van Secret Manager voor het opslaan van een geheim met de naam Endpoints:AppConfiguration, waarin het eindpunt voor uw App Configuration-archief wordt opgeslagen. Vervang de tijdelijke aanduiding door het <your-App-Configuration-endpoint> eindpunt van uw App Configuration-archief. U vindt het eindpunt op de blade Overzicht van uw App Configuration-archief in Azure Portal.

    dotnet user-secrets init
    dotnet user-secrets set Endpoints:AppConfiguration "<your-App-Configuration-endpoint>"
    
  4. Voeg Azure-app configuratie- en functiebeheer toe aan uw toepassing.

    1. U gebruikt de DefaultAzureCredential app om u te verifiëren bij uw App Configuration-archief. Volg de instructies om uw referenties toe te wijzen aan de rol App Configuration Data Reader . Zorg ervoor dat u voldoende tijd hebt om de machtiging door te geven voordat u de toepassing uitvoert.

    2. Werk het Program.cs-bestand bij met de volgende 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. 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 FeatureGate kenmerk toe 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

Er is een doelcontext vereist voor functie-evaluatie met targeting. U kunt deze expliciet opgeven als parameter voor de featureManager.IsEnabledAsync API. In ASP.NET Core kan de doelcontext ook worden aangeboden via de serviceverzameling als omgevingscontext door de ITargetingContextAccessor-interface te implementeren.

Doelcontexttoegangsor

Als u de doelcontext wilt opgeven, geeft u het implementatietype van de ITargetingContextAccessor WithTargeting<T> methode door. Als er geen type wordt opgegeven, wordt een standaard implementatie gebruikt, zoals wordt weergegeven in het volgende codefragment. De standaardinstelling voor contexttoegangsbeheer wordt HttpContext.User.Identity.Name gebruikt als UserId en HttpContext.User.Claims van het type Role voor Groups. U kunt verwijzen naar de DefaultHttpTargetingContextAccessor om uw eigen te implementeren als aanpassing nodig is. Zie de functiereferentie voor targeting voor meer informatie over het ITargetingContextAccessorimplementeren van de functie.

// Existing code in Program.cs
// ... ...

// Add feature management to the container of services
builder.Services.AddFeatureManagement()
                .WithTargeting();

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

Volgende stappen

Ga naar de volgende documenten voor meer informatie over de functiefilters.

Ga verder naar het volgende document voor de volledige functierundown van de .NET-functiebeheerbibliotheek.