Dela via


Självstudie: Distribuera funktioner till målgrupper i ett ASP.NET Core-program

I den här självstudien använder du målfiltret för att distribuera en funktion till målgruppen 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. Lägg till referenser till följande NuGet-paket.

    dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore
    dotnet add package Microsoft.FeatureManagement.AspNetCore
    
  3. Lagra niska veze för appkonfigurationsarkivet.

    dotnet user-secrets init
    dotnet user-secrets set ConnectionStrings:AppConfig "<your_connection_string>"
    
  4. Lägg till Azure App Configuration och funktionshantering i ditt program.

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

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

Målfiltret utvärderar en användares funktionstillstånd baserat på användarens målkontext, som består av användar-ID:t och de grupper som användaren tillhör. I det här exemplet använder du den inloggade användarens e-postadress som användar-ID och domännamnet för e-postadressen som grupp.

  1. Lägg till en ExampleTargetingContextAccessor.cs fil med följande kod. Du implementerar ITargetingContextAccessor gränssnittet för att tillhandahålla målkontexten för den inloggade användaren av den aktuella begäran.

    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. Öppna filen Program.cs och aktivera målfiltret genom att anropa WithTargeting metoden. Du skickar in den typ ExampleTargetingContextAccessor som målfiltret ska använda för att hämta målkontexten under utvärdering av funktionsflagga. Lägg till HttpContextAccessor i tjänstsamlingen för att tillåta ExampleTargetingContextAccessor åtkomst till den inloggade användarinformationen HttpContextfrån .

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

    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.

    Du kan skapa fler användare med @contoso.com och @contoso-xyz.com e-postadresser för att se hur gruppinställningarna fungerar.

    Användare med contoso-xyz.com e-postadresser ser inte betaobjektet . Medan 50 % av användarna med e-postadresser ser betaobjektet ser de övriga 50 % inte betaobjektet.@contoso.com

Nästa steg

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

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