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
- Konto platformy Azure z aktywną subskrypcją. Utwórz je bezpłatnie.
- Magazyn usługi App Configuration. Utwórz magazyn.
- Flaga funkcji z filtrem określania wartości docelowej. Utwórz flagę funkcji.
- Zestaw .NET SDK 6.0 lub nowszy.
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.
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
Dodaj odwołania do następujących pakietów NuGet.
dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore dotnet add package Microsoft.FeatureManagement.AspNetCore
Zapisz parametry połączenia dla sklepu App Configuration.
dotnet user-secrets init dotnet user-secrets set ConnectionStrings:AppConfig "<your_connection_string>"
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 // ... ...
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 // ... ...
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>
Otwórz Beta.cshtml.cs i dodaj
FeatureGate
atrybut doBetaModel
klasy.using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.FeatureManagement.Mvc; namespace TestFeatureFlags.Pages { [FeatureGate("Beta")] public class BetaModel : PageModel { public void OnGet() { } } }
Otwórz plik Pages/_ViewImports.cshtml i zarejestruj pomocnika tagów menedżera funkcji przy użyciu
@addTagHelper
dyrektywy .@addTagHelper *, Microsoft.FeatureManagement.AspNetCore
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.
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); } } }
Otwórz plik Program.cs i włącz filtr określania wartości docelowej, wywołując metodę
WithTargeting
. Przekażesz typExampleTargetingContextAccessor
, 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. DodajHttpContextAccessor
element do kolekcji usług, aby zezwolić naExampleTargetingContextAccessor
dostęp do informacji o zalogowanym użytkowniku z witrynyHttpContext
.// 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
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.
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.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.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.