Öğretici: ASP.NET Core uygulamasında özellikleri hedeflenen hedef kitlelere sunma
Bu öğreticide, ASP.NET Core uygulamanız için hedeflenen hedef kitleye bir özellik dağıtacak hedefleme filtresini kullanacaksınız. Hedefleme filtresi hakkında daha fazla bilgi için bkz . Özellikleri hedeflenen hedef kitlelere dağıtma.
Önkoşullar
- Etkin aboneliği olan bir Azure hesabı. Ücretsiz bir tane oluşturun.
- bir Uygulama Yapılandırması mağazası. Mağaza oluşturma.
- Hedefleme filtresi içeren bir özellik bayrağı. Özellik bayrağını oluşturun.
- .NET SDK 6.0 veya üzeri.
Özellik bayrağıyla web uygulaması oluşturma
Bu bölümde, kullanıcıların oturum açmasına ve daha önce oluşturduğunuz Beta özellik bayrağını kullanmasına olanak tanıyan bir web uygulaması oluşturacaksınız.
Aşağıdaki komutu kullanarak yerel veritabanında kimlik doğrulaması sağlayan bir web uygulaması oluşturun.
dotnet new webapp --auth Individual -o TestFeatureFlags
Aşağıdaki NuGet paketlerine başvurular ekleyin.
dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore dotnet add package Microsoft.FeatureManagement.AspNetCore
Uygulama Yapılandırması mağazanızın bağlantı dizesi depolayın.
dotnet user-secrets init dotnet user-secrets set ConnectionStrings:AppConfig "<your_connection_string>"
Uygulamanıza Azure Uygulaması Yapılandırması ve özellik yönetimi ekleyin.
Program.cs dosyasını aşağıdaki kodla güncelleştirin.
// 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 // ... ...
Uygulama Yapılandırması ara yazılımıyla Azure Uygulaması Yapılandırması'ndan yapılandırma ve özellik bayrağı yenilemeyi etkinleştirin.
Program.cs aşağıdaki kodla güncelleştirin.
// 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 // ... ...
Sayfalar dizininin altına Beta adlı yeni boş bir Razor sayfası ekleyin. Beta.cshtml ve Beta.cshtml.cs dosyaları içerir.
@page @model TestFeatureFlags.Pages.BetaModel @{ ViewData["Title"] = "Beta Page"; } <h1>This is the beta website.</h1>
Beta.cshtml.cs açın ve sınıfına
BetaModel
öznitelik ekleyinFeatureGate
.using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.FeatureManagement.Mvc; namespace TestFeatureFlags.Pages { [FeatureGate("Beta")] public class BetaModel : PageModel { public void OnGet() { } } }
Pages/_ViewImports.cshtml dosyasını açın ve bir
@addTagHelper
yönerge kullanarak özellik yöneticisi Etiket Yardımcısı'nı kaydedin.@addTagHelper *, Microsoft.FeatureManagement.AspNetCore
Sayfalar/Paylaşılan dizininde _Layout.cshtml dosyasını açın. Aşağıdaki vurgulanan satırlarda gösterildiği gibi Giriş ve Gizlilik gezinti çubuğu öğelerinin arasına yeni
<feature>
bir etiket ekleyin.<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>
Web uygulaması için hedeflemeyi etkinleştirme
Hedefleme filtresi, kullanıcının özellik durumunu, kullanıcının kimliğini ve kullanıcının ait olduğu grupları oluşturan hedefleme bağlamını temel alarak değerlendirir. Bu örnekte, oturum açmış kullanıcının e-posta adresini kullanıcı kimliği ve e-posta adresinin etki alanı adını grup olarak kullanırsınız.
Aşağıdaki kodla bir ExampleTargetingContextAccessor.cs dosyası ekleyin. Geçerli isteğin
ITargetingContextAccessor
oturum açmış kullanıcısı için hedefleme bağlamını sağlamak için arabirimini uygularsınız.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); } } }
Program.cs dosyasını açın ve yöntemini çağırarak hedefleme filtresini
WithTargeting
etkinleştirin. Özellik bayrağı değerlendirmesi sırasında hedefleme bağlamını almak için hedefleme filtresinin kullanacağı türüExampleTargetingContextAccessor
geçirirsiniz. 'den oturum açmış kullanıcı bilgilerine erişmesine izin vermekExampleTargetingContextAccessor
için hizmet koleksiyonunaHttpContext
ekleyinHttpContextAccessor
.// 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 // ... ...
Not
Blazor uygulamaları için özellik yönetimini kapsamlı hizmetler olarak etkinleştirme yönergelerine bakın.
Filtrelemeyi hedefleme işlemi
Uygulamayı derleyin ve çalıştırın. Varsayılan yüzde seçeneği 0 olarak ayarlandığından, başlangıçta Beta öğesi araç çubuğunda görünmez.
Yeni bir kullanıcı hesabı oluşturmak için sağ üst köşedeki Kaydet bağlantısını seçin. e-posta adresini
test@contoso.com
kullanın. Kayıt Onayı ekranında Hesabınızı onaylamak için buraya tıklayın'ı seçin.Hesabı kaydederken ayarladığınız parolayı kullanarak olarak
test@contoso.com
oturum açın.Hedeflenen kullanıcı olarak belirtildiğinden
test@contoso.com
Beta öğesi artık araç çubuğunda görünür.Şimdi hesabı kaydederken ayarladığınız parolayı kullanarak olarak
testuser@contoso.com
oturum açın. Beta öğesi, dışlanan bir kullanıcı olarak belirtildiğindentestuser@contoso.com
araç çubuğunda görünmez.Grup ayarlarının davranışını görmek için ve
@contoso-xyz.com
e-posta adresleriyle@contoso.com
daha fazla kullanıcı oluşturabilirsiniz.E-posta adresleri olan
contoso-xyz.com
kullanıcılar Beta öğesini görmez. E-posta adreslerine sahip@contoso.com
kullanıcıların %50'sinde Beta öğesi görünürken, diğer %50'lik kısmı Beta öğesini görmez.
Sonraki adımlar
Özellik filtreleri hakkında daha fazla bilgi edinmek için aşağıdaki öğreticilere geçin.
.NET özellik yönetimi kitaplığının tam özellik çalıştırması için aşağıdaki belgeye geçin.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin