Povolení postupného zavedení funkcí pro cílové skupiny
Cílení je strategie správy funkcí, která vývojářům umožňuje postupně zavádět nové funkce do uživatelské základny. Strategie je založená na konceptu cílení na skupinu uživatelů, kteří se označují jako cílová skupina. Cílová skupina se skládá z konkrétních uživatelů, skupin a určeného procenta celé uživatelské základny.
Uživatelé můžou být skutečnými uživatelskými účty, ale můžou to být také počítače, zařízení nebo jakékoli jednoznačně identifikovatelné entity, pro které chcete zavést funkci.
Skupiny jsou v aplikaci, které se mají definovat. Například při cílení na uživatelské účty můžete použít skupiny Microsoft Entra nebo skupiny označující umístění uživatelů. Při cílení na počítače je můžete seskupit podle fází uvedení. Skupiny můžou být jakékoli běžné atributy, na základě kterých chcete kategorizovat cílovou skupinu.
V tomto článku se dozvíte, jak zavést novou funkci ve webové aplikaci ASP.NET Core pro zadané uživatele a skupiny pomocí TargetingFilter
Aplikace Azure Konfigurace.
Požadavky
- Dokončete rychlý start: Přidání příznaků funkcí do aplikace ASP.NET Core.
Microsoft.FeatureManagement.AspNetCore
Aktualizujte balíček na verzi 3.0.0 nebo novější.
Vytvoření webové aplikace s příznaky ověřování a funkcí
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. Většina kroků je velmi podobná tomu, co jste udělali v rychlém startu.
Pomocí následujícího příkazu vytvořte webovou aplikaci, která se ověřuje v místní databázi.
dotnet new mvc --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>"
Aktualizujte 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"); // Load 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 // ... ...
// 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 Views\Home přidejte beta.cshtmla aktualizujte ho následujícím kódem.
@{ ViewData["Title"] = "Beta Page"; } <h1>This is the beta website.</h1>
Otevřete HomeController.cs v adresáři Kontrolery a aktualizujte ho následujícím kódem.
public IActionResult Beta() { return View(); }
Otevřete soubor _ViewImports.cshtml a pomocí direktivy zaregistrujte pomocnou rutinu
@addTagHelper
značek správce funkcí:@addTagHelper *, Microsoft.FeatureManagement.AspNetCore
Otevřete soubor _Layout.cshtml v adresáři Views\Shared. Vložte novou
<feature>
značku mezi položky domovské stránky a navigačního panelu ochrany osobních údajů.<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between"> <ul class="navbar-nav flex-grow-1"> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a> </li> <feature name="Beta"> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Beta">Beta</a> </li> </feature> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a> </li> </ul> <partial name="_LoginPartial" /> </div>
Proveďte sestavení a spuštění. Potom v pravém horním rohu vyberte odkaz Pro registraci a 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řepněte příznak funkce v Konfiguraci aplikace. Ověřte, že tato akce řídí viditelnost položky Beta na navigačním panelu.
Aktualizujte kód webové aplikace tak, aby se používal. TargetingFilter
V tuto chvíli můžete funkci povolit nebo zakázat pro všechny uživatele pomocí příznaku Beta
funkce. Pokud chcete příznak funkce povolit některým uživatelům a zároveň ho zakázat pro jiné, aktualizujte kód tak, aby používal TargetingFilter
. V tomto příkladu použijete e-mailovou adresu přihlášeného uživatele jako ID uživatele a část názvu domény e-mailové adresy jako skupinu. Uživatele a skupinu přidáte do souboru TargetingContext
. Tento TargetingFilter
kontext používá k určení stavu příznaku funkce pro každý požadavek.
Přidejte ExampleTargetingContextAccessor.cs soubor.
using Microsoft.AspNetCore.Http; using Microsoft.FeatureManagement.FeatureFilters; using System; using System.Collections.Generic; using System.Threading.Tasks; 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
Program.cs
a přidejteExampleTargetingContextAccessor
vytvořenou v předchozím kroku aTargetingFilter
do kolekce služeb volánímWithTargeting
metody za existující řádekAddFeatureManagement
. PoužijeTargetingFilter
seExampleTargetingContextAccessor
k určení kontextu cílení při každém vyhodnocení příznaku funkce.// Existing code in Program.cs // ... ... // Add feature management to the container of services builder.Services.AddFeatureManagement() .WithTargeting<ExampleTargetingContextAccessor>(); // 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.
Aktualizace příznaku funkce tak, aby používala targetingFilter
Na webu Azure Portal přejděte do obchodu App Configuration Store a vyberte Správce funkcí.
Vyberte místní nabídku příznaku funkce Beta , který jste vytvořili v rychlém startu. Vyberte položku Upravit.
Na obrazovce Upravit zaškrtněte políčko Povolit příznak funkce, pokud ještě není zaškrtnuté. Potom zaškrtněte políčko Použít filtr funkcí.
Vyberte tlačítko Vytvořit.
V rozevíracím seznamu Typ filtru vyberte filtr Cílení.
Zaškrtněte políčko Přepsat podle skupin a přepsat uživatelem .
Vyberte následující možnosti.
- Výchozí procento: 0
- Zahrnout skupiny: Zadejte názevcontoso.com a procento z 50
- Vyloučit skupiny:
contoso-xyz.com
- Zahrnout uživatele:
test@contoso.com
- Vyloučit uživatele:
testuser@contoso.com
Obrazovka filtru funkcí bude vypadat takto.
Výsledkem těchto nastavení je následující chování.
- Příznak funkce je vždy zakázán pro uživatele
testuser@contoso.com
, protožetestuser@contoso.com
je uveden v části Vyloučit uživatele . - Příznak funkce je pro uživatele v oddílu
contoso-xyz.com
Vyloučit skupiny vždy zakázán, protožecontoso-xyz.com
je uveden v části Vyloučit skupiny . - Příznak funkce je vždy povolený pro uživatele
test@contoso.com
, protožetest@contoso.com
je uveden v části Zahrnout uživatele . - Příznak funkce je povolený pro 50 % uživatelů ve skupině contoso.com, protože contoso.com je uveden v části Zahrnout skupiny s procentem 50.
- Funkce je vždy zakázaná pro všechny ostatní uživatele, protože výchozí procento je nastavené na 0.
Výběrem možnosti Přidat uložíte filtr cílení.
Pokud chcete tato nastavení uložit, vyberte Použít a vraťte se na obrazovku Správce funkcí.
Filtr funkcí pro příznak funkce se teď zobrazuje jako cílení. Tento stav označuje, že příznak funkce je povolený nebo zakázaný pro jednotlivé požadavky na základě kritérií vynucených filtrem funkcí cílení .
TargetingFilter in action
Pokud chcete zobrazit účinky tohoto příznaku funkce, 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.
Teď se přihlaste jako test@contoso.com
pomocí hesla, které jste nastavili při registraci. 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. Položka Beta se na panelu nástrojů nezobrazí, protože testuser@contoso.com
je určená jako vyloučený uživatel.
Následující video ukazuje toto chování v akci.
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 .