Udostępnij za pośrednictwem


Samouczek: wdrażanie funkcji dla docelowych odbiorców w aplikacji ASP.NET Core

W tym samouczku użyjesz filtru określania wartości docelowej, aby wdrożyć funkcję docelową odbiorców dla aplikacji ASP.NET Core. Aby uzyskać więcej informacji na temat filtru określania wartości docelowej, zobacz Wdrażanie funkcji dla docelowych odbiorców.

Wymagania wstępne

Tworzenie aplikacji internetowej z flagą funkcji

W tej sekcji utworzysz aplikację internetową, która umożliwia użytkownikom logowanie się i korzystanie z flagi funkcji beta utworzonej wcześniej.

  1. Utwórz aplikację internetową, która uwierzytelnia się w lokalnej bazie danych przy użyciu następującego polecenia.

    dotnet new webapp --auth Individual -o TestFeatureFlags
    
  2. Dodaj odwołania do następujących pakietów NuGet.

    dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore
    dotnet add package Microsoft.FeatureManagement.AspNetCore
    
  3. Zapisz parametry połączenia dla sklepu App Configuration.

    dotnet user-secrets init
    dotnet user-secrets set ConnectionStrings:AppConfig "<your_connection_string>"
    
  4. Dodaj aplikacja systemu Azure Konfiguracja i zarządzanie funkcjami do aplikacji.

    Zaktualizuj plik Program.cs przy użyciu następującego kodu.

    // 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. Włącz odświeżanie konfiguracji i flagi funkcji z aplikacja systemu Azure Configuration przy użyciu oprogramowania pośredniczącego App Configuration.

    Zaktualizuj Program.cs przy użyciu następującego kodu.

    // 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. Dodaj nową pustą stronę Razor o nazwie Beta w katalogu Pages. Zawiera dwa pliki Beta.cshtml i Beta.cshtml.cs.

    @page
    @model TestFeatureFlags.Pages.BetaModel
    @{
        ViewData["Title"] = "Beta Page";
    }
    
    <h1>This is the beta website.</h1>
    
  7. Otwórz Beta.cshtml.cs i dodaj FeatureGate atrybut do BetaModel klasy.

    using Microsoft.AspNetCore.Mvc.RazorPages;
    using Microsoft.FeatureManagement.Mvc;
    
    namespace TestFeatureFlags.Pages
    {
        [FeatureGate("Beta")]
        public class BetaModel : PageModel
        {
            public void OnGet()
            {
            }
        }
    }
    
  8. Otwórz plik Pages/_ViewImports.cshtml i zarejestruj pomocnika tagów menedżera funkcji przy użyciu @addTagHelper dyrektywy .

    @addTagHelper *, Microsoft.FeatureManagement.AspNetCore
    
  9. Otwórz plik _Layout.cshtml w katalogu Pages/Shared . Wstaw nowy <feature> tag między elementami paska nawigacyjnego Strona główna i Prywatność , jak pokazano w wyróżnionych wierszach poniżej.

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

Włączanie określania wartości docelowej dla aplikacji internetowej

Filtr określania wartości docelowej ocenia stan funkcji użytkownika na podstawie kontekstu określania wartości docelowej użytkownika, który obejmuje identyfikator użytkownika i grupy, do których należy użytkownik. W tym przykładzie adres e-mail zalogowanego użytkownika jest używany jako identyfikator użytkownika i nazwa domeny adresu e-mail jako grupa.

  1. Dodaj plik ExampleTargetingContextAccessor.cs z następującym kodem. Zaimplementujesz ITargetingContextAccessor interfejs, aby zapewnić kontekst określania wartości docelowej dla zalogowanego użytkownika bieżącego żądania.

    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. Otwórz plik Program.cs i włącz filtr określania wartości docelowej, wywołując metodę WithTargeting . Przekażesz typ ExampleTargetingContextAccessor , który będzie używany przez filtr określania wartości docelowej, aby uzyskać kontekst określania wartości docelowej podczas oceny flagi funkcji. Dodaj HttpContextAccessor element do kolekcji usług, aby zezwolić na ExampleTargetingContextAccessor dostęp do informacji o zalogowanym użytkowniku z witryny 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
    // ... ...
    

    Uwaga

    Aby uzyskać informacje o aplikacjach Platformy Blazor, zobacz instrukcje dotyczące włączania zarządzania funkcjami jako usług o określonym zakresie.

Filtr określania wartości docelowej w akcji

  1. Skompiluj i uruchom aplikację. Początkowo element beta nie jest wyświetlany na pasku narzędzi, ponieważ opcja Wartość procentowa domyślna jest ustawiona na 0.

    Użytkownik nie jest zalogowany i nie jest wyświetlany element beta

  2. Wybierz link Zarejestruj w prawym górnym rogu, aby utworzyć nowe konto użytkownika. Użyj adresu e-mail .test@contoso.com Na ekranie Zarejestruj potwierdzenie wybierz pozycję Kliknij tutaj, aby potwierdzić swoje konto.

  3. Zaloguj się jako test@contoso.com, używając hasła ustawionego podczas rejestrowania konta.

    Element beta jest teraz wyświetlany na pasku narzędzi, ponieważ test@contoso.com jest określony jako docelowy użytkownik.

    Użytkownik zalogowany i wyświetlony element beta

    Teraz zaloguj się jako testuser@contoso.com, używając hasła ustawionego podczas rejestrowania konta. Element beta nie jest wyświetlany na pasku narzędzi, ponieważ testuser@contoso.com jest określony jako wykluczony użytkownik.

    Aby zobaczyć zachowanie ustawień grupy, możesz utworzyć więcej użytkowników z adresami @contoso.com e-mail i @contoso-xyz.com adresami e-mail.

    Użytkownicy z adresami contoso-xyz.com e-mail nie zobaczą elementu beta . Chociaż 50% użytkowników z adresami @contoso.com e-mail zobaczy element beta , pozostałe 50% nie będzie widzieć elementu beta .

Następne kroki

Aby dowiedzieć się więcej na temat filtrów funkcji, przejdź do następujących samouczków.

Aby uruchomić pełną funkcję biblioteki zarządzania funkcjami platformy .NET, przejdź do następującego dokumentu.