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
- Ett Azure-konto med en aktiv prenumeration. Skapa en kostnadsfritt.
- Ett appkonfigurationsarkiv. Skapa en butik.
- En funktionsflagga med målfilter. Skapa funktionsflaggan.
- .NET SDK 6.0 eller senare.
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.
Skapa ett webbprogram som autentiserar mot en lokal databas med hjälp av följande kommando.
dotnet new webapp --auth Individual -o TestFeatureFlags
Lägg till referenser till följande NuGet-paket.
dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore dotnet add package Microsoft.FeatureManagement.AspNetCore
Lagra niska veze för appkonfigurationsarkivet.
dotnet user-secrets init dotnet user-secrets set ConnectionStrings:AppConfig "<your_connection_string>"
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 // ... ...
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 // ... ...
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>
Öppna Beta.cshtml.cs och lägg till
FeatureGate
attribut iBetaModel
klassen.using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.FeatureManagement.Mvc; namespace TestFeatureFlags.Pages { [FeatureGate("Beta")] public class BetaModel : PageModel { public void OnGet() { } } }
Öppna Pages/_ViewImports.cshtml och registrera hjälpverktyget för funktionshanteraren med hjälp av ett
@addTagHelper
direktiv.@addTagHelper *, Microsoft.FeatureManagement.AspNetCore
Ö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.
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); } } }
Öppna filen Program.cs och aktivera målfiltret genom att anropa
WithTargeting
metoden. Du skickar in den typExampleTargetingContextAccessor
som målfiltret ska använda för att hämta målkontexten under utvärdering av funktionsflagga. Lägg tillHttpContextAccessor
i tjänstsamlingen för att tillåtaExampleTargetingContextAccessor
åtkomst till den inloggade användarinformationenHttpContext
frå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
Skapa och kör programmet. Till en början visas inte betaobjektet i verktygsfältet eftersom alternativet Standardprocent är inställt på 0.
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.Logga in som
test@contoso.com
med 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.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 eftersomtestuser@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.
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för