Kurz: Zavedení funkcí cílovým skupinám v aplikaci ASP.NET Core
V tomto kurzu použijete filtr cílení k zavedení funkce cílové skupině pro vaši aplikaci ASP.NET Core. Další informace o filtru cílení najdete v tématu Zavedení funkcí cílovým skupinám.
Požadavky
- Účet Azure s aktivním předplatným. Vytvořte si ho zdarma.
- App Configuration Store. Vytvořte úložiště.
- Příznak funkce s filtrem cílení. Vytvořte příznak funkce.
- .NET SDK 6.0 nebo novější.
Vytvoření webové aplikace s příznakem funkce
V této části vytvoříte webovou aplikaci, která uživatelům umožní přihlásit se a použít příznak funkce Beta , který jste vytvořili dříve.
Pomocí následujícího příkazu vytvořte webovou aplikaci, která se ověřuje v místní databázi.
dotnet new webapp --auth Individual -o TestFeatureFlags
Přidejte odkazy na následující balíčky NuGet.
dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore dotnet add package Microsoft.FeatureManagement.AspNetCore
Uložte připojovací řetězec pro app Configuration Store.
dotnet user-secrets init dotnet user-secrets set ConnectionStrings:AppConfig "<your_connection_string>"
Přidejte do aplikace Aplikace Azure Konfigurace a správu funkcí.
Aktualizujte soubor Program.cs následujícím kódem.
// 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 // ... ...
Povolte aktualizaci příznaku konfigurace a funkce z Aplikace Azure Konfigurace pomocí middlewaru Konfigurace aplikace.
Aktualizujte Program.cs následujícím kódem.
// 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 // ... ...
Do adresáře Pages přidejte novou prázdnou stránku Razor Page s názvem Beta . Obsahuje dva soubory Beta.cshtml a Beta.cshtml.cs.
@page @model TestFeatureFlags.Pages.BetaModel @{ ViewData["Title"] = "Beta Page"; } <h1>This is the beta website.</h1>
Otevřete Beta.cshtml.cs a přidejte
FeatureGate
do třídy atributBetaModel
.using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.FeatureManagement.Mvc; namespace TestFeatureFlags.Pages { [FeatureGate("Beta")] public class BetaModel : PageModel { public void OnGet() { } } }
Otevřete Pages/_ViewImports.cshtml a zaregistrujte pomocníka značky správce funkcí pomocí direktivy
@addTagHelper
.@addTagHelper *, Microsoft.FeatureManagement.AspNetCore
Otevřete soubor _Layout.cshtml v adresáři Pages/Shared . Vložte novou
<feature>
značku mezi položky domovské stránky a navigačního panelu ochrany osobních údajů, jak je znázorněno na zvýrazněných řádcích níže.<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>
Povolení cílení pro webovou aplikaci
Filtr cílení vyhodnocuje stav funkce uživatele na základě kontextu cílení uživatele, který zahrnuje ID uživatele a skupiny, do kterých uživatel patří. V tomto příkladu použijete e-mailovou adresu přihlášeného uživatele jako ID uživatele a název domény e-mailové adresy jako skupiny.
Přidejte ExampleTargetingContextAccessor.cs soubor s následujícím kódem. Implementujete
ITargetingContextAccessor
rozhraní pro poskytnutí kontextu cílení pro přihlášeného uživatele aktuálního požadavku.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); } } }
Otevřete soubor Program.cs a povolte filtr cílení voláním
WithTargeting
metody. Předáte typExampleTargetingContextAccessor
, který filtr cílení použije k získání kontextu cílení během vyhodnocení příznaku funkce. PřidejteHttpContextAccessor
do kolekce služeb, aby bylo možnéExampleTargetingContextAccessor
získat přístup k informacím přihlášeného uživatele z aplikaceHttpContext
.// 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 // ... ...
Poznámka:
Informace o aplikacích Blazor najdete v pokynech k povolení správy funkcí jako služeb s vymezeným oborem.
Cílení filtru v akci
Sestavte a spusťte aplikaci. Na začátku se položka Beta na panelu nástrojů nezobrazí, protože výchozí procentuální hodnota je nastavená na 0.
Výběrem odkazu Zaregistrovat v pravém horním rohu vytvořte nový uživatelský účet. Použijte e-mailovou
test@contoso.com
adresu . Na obrazovce Potvrzení registrace potvrďte svůj účet kliknutím sem.Přihlaste se jako
test@contoso.com
pomocí hesla, které jste nastavili při registraci účtu.Položka Beta se teď zobrazí na panelu nástrojů, protože
test@contoso.com
je určená jako cílový uživatel.Teď se přihlaste jako
testuser@contoso.com
pomocí hesla, které jste nastavili při registraci účtu. Položka Beta se na panelu nástrojů nezobrazí, protožetestuser@contoso.com
je určená jako vyloučený uživatel.Můžete vytvořit více uživatelů s e-mailovými
@contoso-xyz.com
adresami@contoso.com
, abyste viděli chování nastavení skupiny.Uživatelé s e-mailovými adresami
contoso-xyz.com
neuvidí položku Beta . I když 50 % uživatelů s e-mailovými@contoso.com
adresami uvidí položku Beta , ostatní 50 % neuvidí položku Beta .
Další kroky
Další informace o filtrech funkcí najdete v následujících kurzech.
Úplný běh funkcí knihovny pro správu funkcí .NET najdete v následujícím dokumentu.