Dela via


Distribuera funktioner till målgrupper i ett ASP.NET Core-program

I den här guiden använder du målfiltret för att distribuera en funktion till målgrupper för ditt ASP.NET Core-program. Mer information om målfiltret finns i Distribuera funktioner till målgrupper.

Förutsättningar

Skapa ett webbprogram med en funktionsflagga

I det här avsnittet skapar du ett webbprogram som gör att användare kan logga in och använda den betafunktionsflagga som du skapade tidigare.

  1. Skapa ett webbprogram som autentiserar mot en lokal databas med hjälp av följande kommando.

    dotnet new webapp --auth Individual -o TestFeatureFlags
    
  2. Gå till den nyligen skapade katalogen TestFeatureFlags och lägg till referenser till följande NuGet-paket.

    dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore
    dotnet add package Microsoft.FeatureManagement.AspNetCore
    dotnet add package Azure.Identity
    
  3. Skapa en användarhemlighet för programmet genom att köra följande kommandon.

    Kommandot använder Secret Manager för att lagra en hemlighet med namnet Endpoints:AppConfiguration, som lagrar slutpunkten för appkonfigurationsarkivet. <your-App-Configuration-endpoint> Ersätt platshållaren med appkonfigurationsarkivets slutpunkt. Du hittar slutpunkten på bladet Översikt för appkonfigurationsarkivet i Azure Portal.

    dotnet user-secrets init
    dotnet user-secrets set Endpoints:AppConfiguration "<your-App-Configuration-endpoint>"
    
  4. Lägg till Azure App Configuration och funktionshantering i ditt program.

    1. Du använder för att autentisera DefaultAzureCredential till appkonfigurationsarkivet. Följ anvisningarna för att tilldela dina autentiseringsuppgifter rollen App Configuration Data Reader. Se till att ge tillräckligt med tid för att behörigheten ska spridas innan du kör programmet.

    2. Uppdatera Program.cs-filen med följande kod.

      // 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. Aktivera uppdatering av konfigurations- och funktionsflaggan från Azure App Configuration med mellanprogrammet För appkonfiguration.

    Uppdatera Program.cs med följande kod.

    // 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. Lägg till en ny tom Razor-sida med namnet Beta under katalogen Pages. Den innehåller två filer Beta.cshtml och Beta.cshtml.cs.

    @page
    @model TestFeatureFlags.Pages.BetaModel
    @{
        ViewData["Title"] = "Beta Page";
    }
    
    <h1>This is the beta website.</h1>
    
  7. Öppna Beta.cshtml.cs och lägg till FeatureGate attributet i BetaModel klassen.

    using Microsoft.AspNetCore.Mvc.RazorPages;
    using Microsoft.FeatureManagement.Mvc;
    
    namespace TestFeatureFlags.Pages
    {
        [FeatureGate("Beta")]
        public class BetaModel : PageModel
        {
            public void OnGet()
            {
            }
        }
    }
    
  8. Öppna Pages/_ViewImports.cshtml och registrera hjälpverktyget för funktionshanteraren med hjälp av ett @addTagHelper direktiv.

    @addTagHelper *, Microsoft.FeatureManagement.AspNetCore
    
  9. Öppna _Layout.cshtml i katalogen Pages/Shared . Infoga en ny <feature> tagg mellan start- och sekretessnavigeringsobjekten, enligt de markerade raderna nedan.

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

Aktivera mål för webbprogrammet

En målkontext krävs för funktionsutvärdering med inriktning. Du kan uttryckligen ange den som en parameter för API:et featureManager.IsEnabledAsync . I ASP.NET Core kan målkontexten också tillhandahållas via tjänstsamlingen som en omgivande kontext genom att implementera gränssnittet ITargetingContextAccessor .

Rikta in sig på kontextåtkomst

Om du vill ange målkontexten skickar du implementeringstypen ITargetingContextAccessor för metoden till WithTargeting<T> metoden. Om ingen typ anges används en standardimplementering, som visas i följande kodfragment. Standardinställningen för kontextåtkomst använder HttpContext.User.Identity.Name som UserId och HttpContext.User.Claims av typen Role för Groups. Du kan referera till DefaultHttpTargetingContextAccessor för att implementera din egen om anpassning behövs. Mer information om hur du implementerar ITargetingContextAccessorfinns i funktionsreferensen för mål.

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

Kommentar

För Blazor-program, se instruktioner för att aktivera funktionshantering som begränsade tjänster.

Målfilter i praktiken

  1. Skapa och kör programmet. Till en början visas inte betaobjektet i verktygsfältet eftersom alternativet Standardprocent är inställt på 0.

    Användaren har inte loggat in och Betaobjektet visas inte

  2. Välj länken Registrera i det övre högra hörnet för att skapa ett nytt användarkonto. Använd en e-postadress till test@contoso.com. På skärmen Registrera bekräftelse väljer du Klicka här för att bekräfta ditt konto.

  3. Logga in som test@contoso.commed det lösenord som du angav när du registrerade kontot.

    Betaobjektet visas nu i verktygsfältet eftersom test@contoso.com det har angetts som en målanvändare.

    Användaren har loggat in och betaobjektet visas

    Logga nu in som testuser@contoso.com, med det lösenord som du angav när du registrerade kontot. Betaobjektet visas inte i verktygsfältet eftersom testuser@contoso.com det anges som en exkluderad användare.

Nästa steg

Om du vill veta mer om funktionsfiltren fortsätter du till följande dokument.

Fortsätt till följande dokument för den fullständiga funktionskörningen i .NET-funktionshanteringsbiblioteket.