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
- 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
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
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>"
Lägg till Azure App Configuration och funktionshantering i ditt program.
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.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 // ... ...
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
attributet 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
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 ITargetingContextAccessor
finns 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
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.
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.