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

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.

  1. 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
    
  2. Přidejte odkazy na následující balíčky NuGet.

    dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore
    dotnet add package Microsoft.FeatureManagement.AspNetCore
    
  3. Uložte připojovací řetězec pro app Configuration Store.

    dotnet user-secrets init
    dotnet user-secrets set ConnectionStrings:AppConfig "<your_connection_string>"
    
  4. 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
    // ... ...
    
  5. 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>
    
  6. Otevřete HomeController.cs v adresáři Kontrolery a aktualizujte ho následujícím kódem.

    public IActionResult Beta()
    {
        return View();
    }
    
  7. Otevřete soubor _ViewImports.cshtml a pomocí direktivy zaregistrujte pomocnou rutinu @addTagHelper značek správce funkcí:

    @addTagHelper *, Microsoft.FeatureManagement.AspNetCore
    
  8. 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>
    
  9. 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.comadresu . Na obrazovce Potvrzení registrace potvrďte svůj účet kliknutím sem.

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

  1. 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);
            }
        }
    }
    
  2. Otevřete Program.cs a přidejte ExampleTargetingContextAccessor vytvořenou v předchozím kroku a TargetingFilter do kolekce služeb voláním WithTargeting metody za existující řádek AddFeatureManagement. Použije TargetingFilter se ExampleTargetingContextAccessor 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

  1. Na webu Azure Portal přejděte do obchodu App Configuration Store a vyberte Správce funkcí.

  2. Vyberte místní nabídku příznaku funkce Beta , který jste vytvořili v rychlém startu. Vyberte položku Upravit.

    Edit Beta feature flag

  3. 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í.

  4. Vyberte tlačítko Vytvořit.

  5. V rozevíracím seznamu Typ filtru vyberte filtr Cílení.

  6. Zaškrtněte políčko Přepsat podle skupin a přepsat uživatelem .

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

    Conditional feature flag

    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že testuser@contoso.com je uveden v části Vyloučit uživatele .
    • Příznak funkce je pro uživatele v oddílu contoso-xyz.comVyloučit skupiny vždy zakázán, protože contoso-xyz.com je uveden v části Vyloučit skupiny .
    • Příznak funkce je vždy povolený pro uživatele test@contoso.com, protože test@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.
  8. Výběrem možnosti Přidat uložíte filtr cílení.

  9. Pokud chcete tato nastavení uložit, vyberte Použít a vraťte se na obrazovku Správce funkcí.

  10. 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.compomocí 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.compomocí 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.

TargetingFilter in action

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