Sdílet prostřednictvím


Zavedení funkcí cílovým skupinám v aplikaci ASP.NET Core

V této příručce použijete filtr cílení k zavedení funkce cílovým skupinám 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řejděte do nově vytvořeného adresáře TestFeatureFlags a přidejte odkazy na následující balíčky NuGet.

    dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore
    dotnet add package Microsoft.FeatureManagement.AspNetCore
    dotnet add package Azure.Identity
    
  3. Spuštěním následujících příkazů vytvořte pro aplikaci tajný klíč uživatele.

    Příkaz používá Správce tajných kódů k uložení tajného kódu s názvem Endpoints:AppConfiguration, který ukládá koncový bod pro váš App Configuration Store. <your-App-Configuration-endpoint> Zástupný symbol nahraďte koncovým bodem vašeho App Configuration Storu. Koncový bod najdete v okně Přehled obchodu App Configuration Store na webu Azure Portal.

    dotnet user-secrets init
    dotnet user-secrets set Endpoints:AppConfiguration "<your-App-Configuration-endpoint>"
    
  4. Přidejte do aplikace Aplikace Azure Konfigurace a správu funkcí.

    1. Použijete DefaultAzureCredential k ověření ve službě App Configuration Store. Postupujte podle pokynů a přiřaďte své přihlašovací údaje roli Čtenář dat konfigurace aplikace. Před spuštěním aplikace nezapomeňte povolit dostatek času, než se oprávnění rozšíří.

    2. Aktualizujte soubor Program.cs následujícím kódem.

      // 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
      // ... ...
      
  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 atribut do BetaModel třídy.

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

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

Úplný běh funkcí knihovny pro správu funkcí .NET najdete v následujícím dokumentu.