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

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.

  1. 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
    
  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. 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
    // ... ...
    
  5. 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
    // ... ...
    
  6. 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>
    
  7. 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()
            {
            }
        }
    }
    
  8. Otevřete Pages/_ViewImports.cshtml a zaregistrujte pomocníka značky správce funkcí pomocí direktivy @addTagHelper .

    @addTagHelper *, Microsoft.FeatureManagement.AspNetCore
    
  9. Otevřete soubor _Layout.cshtml v adresáři Pages/Shared . Vložte novou <feature> značku mezi položky domovské stránkya 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.

  1. 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);
            }
        }
    }
    
  2. Otevřete soubor Program.cs a povolte filtr cílení voláním WithTargeting metody. Předáte typ ExampleTargetingContextAccessor , který filtr cílení použije k získání kontextu cílení během vyhodnocení příznaku funkce. Přidejte HttpContextAccessor do kolekce služeb, aby bylo možné ExampleTargetingContextAccessor získat přístup k informacím přihlášeného uživatele z aplikace HttpContext.

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

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

    Uživatel není přihlášený a položka beta verze se nezobrazuje

  2. Výběrem odkazu Zaregistrovat v pravém horním rohu 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.

  3. Přihlaste se jako test@contoso.compomocí 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.

    Uživatel přihlášený a zobrazená položka beta verze

    Teď se přihlaste jako testuser@contoso.compomocí hesla, které jste nastavili při registraci účtu. Položka Beta se na panelu nástrojů nezobrazí, protože testuser@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.