البرنامج التعليمي: طرح الميزات للجماهير المستهدفة في تطبيق ASP.NET Core
في هذا البرنامج التعليمي، ستستخدم عامل تصفية الاستهداف لنشر ميزة للجمهور المستهدف لتطبيق ASP.NET Core. لمزيد من المعلومات حول عامل تصفية الاستهداف، راجع طرح الميزات للجماهير المستهدفة.
المتطلبات الأساسية
- حساب Azure مع اشتراك نشط. أنشئ حسابًا مجانًا.
- متجر App Configuration. إنشاء متجر.
- علامة ميزة مع عامل تصفية الاستهداف. إنشاء علامة الميزة.
- .NET SDK 6.0 أو أحدث.
إنشاء تطبيق ويب مع علامة ميزة
في هذا القسم، ستقوم بإنشاء تطبيق ويب يسمح للمستخدمين بتسجيل الدخول واستخدام علامة ميزة Beta التي قمت بإنشائها من قبل.
إنشاء تطبيق ويب يصادق على قاعدة بيانات محلية باستخدام الأمر التالي.
dotnet new webapp --auth Individual -o TestFeatureFlags
أضف مراجع إلى حزم NuGet التالية.
dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore dotnet add package Microsoft.FeatureManagement.AspNetCore
تخزين سلسلة الاتصال لمتجر App Configuration.
dotnet user-secrets init dotnet user-secrets set ConnectionStrings:AppConfig "<your_connection_string>"
إضافة تكوين تطبيق Azure وإدارة الميزات إلى التطبيق الخاص بك.
قم بتحديث ملف Program.cs بالتعليمات البرمجية التالية.
// 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 // ... ...
تمكين تحديث علامة الميزة والتكوين من Azure App Configuration باستخدام البرنامج الوسيط App Configuration.
تحديث Program.cs بالتعليمات البرمجية التالية.
// 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 // ... ...
أضف صفحة Razor فارغة جديدة تسمى Beta ضمن دليل Pages. يتضمن ملفين Beta.cshtml و Beta.cshtml.cs.
@page @model TestFeatureFlags.Pages.BetaModel @{ ViewData["Title"] = "Beta Page"; } <h1>This is the beta website.</h1>
افتح Beta.cshtml.cs، وأضف
FeatureGate
سمةBetaModel
إلى الفئة .using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.FeatureManagement.Mvc; namespace TestFeatureFlags.Pages { [FeatureGate("Beta")] public class BetaModel : PageModel { public void OnGet() { } } }
افتح Pages/_ViewImports.cshtml، وسجل مدير الميزات Tag Helper باستخدام
@addTagHelper
توجيه.@addTagHelper *, Microsoft.FeatureManagement.AspNetCore
افتح _Layout.cshtml في الدليل Pages/Shared . أدخل علامة
<feature>
جديدة بين عنصري شريط التنقل Home وPrivacy، كما هو موضح في الأسطر المميزة أدناه.<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>
تمكين الاستهداف لتطبيق الويب
يقوم عامل تصفية الاستهداف بتقييم حالة ميزة المستخدم استنادا إلى سياق استهداف المستخدم، والذي يتضمن معرف المستخدم والمجموعات التي ينتمي إليها المستخدم. في هذا المثال، يمكنك استخدام عنوان البريد الإلكتروني للمستخدم الذي سجل الدخول كمعرف المستخدم واسم مجال عنوان البريد الإلكتروني كمجموعة.
أضف ملف ExampleTargetingContextAccessor.cs مع التعليمات البرمجية التالية. يمكنك تنفيذ الواجهة
ITargetingContextAccessor
لتوفير سياق الاستهداف للمستخدم الذي سجل الدخول للطلب الحالي.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 وقم بتمكين عامل تصفية الاستهداف عن طريق استدعاء
WithTargeting
الأسلوب . يمكنك تمرير النوعExampleTargetingContextAccessor
الذي سيستخدمه عامل تصفية الاستهداف للحصول على سياق الاستهداف أثناء تقييم علامة الميزة. أضفHttpContextAccessor
إلى مجموعة الخدمة للسماح بالوصولExampleTargetingContextAccessor
إلى معلومات المستخدم التي تم تسجيل الدخول إليها من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 // ... ...
إشعار
بالنسبة لتطبيقات Blazor، راجع إرشادات تمكين إدارة الميزات كخدمات محددة النطاق.
تصفية الاستهداف قيد التنفيذ
إنشاء التطبيق وتشغيله. مبدئيًا، لا يظهر عنصر إصدار بيتا على شريط الأدوات، لأنه تم تعيين خيار النسبة المئوية الافتراضية على 0.
حدد رابط Register في الزاوية العلوية اليسرى لإنشاء حساب مستخدم جديد. استخدم عنوان بريد إلكتروني لـ
test@contoso.com
. في شاشة تأكيد التسجيل، حدد انقر هنا لتأكيد حسابك.سجل الدخول باسم
test@contoso.com
، باستخدام كلمة المرور التي قمت بتعيينها عند تسجيل الحساب.يظهر عنصر بيتا الآن على شريط الأدوات، لأنه تم تحديد
test@contoso.com
كمستخدم مستهدف.سجل الدخول الآن باسم
testuser@contoso.com
، باستخدام كلمة المرور التي قمت بتعيينها عند تسجيل الحساب. لا يظهر عنصر Beta على شريط الأدوات، لأنهtestuser@contoso.com
محدد كمستخدم مستبعد.يمكنك إنشاء المزيد من المستخدمين باستخدام
@contoso.com
عناوين البريد الإلكتروني و@contoso-xyz.com
لرؤية سلوك إعدادات المجموعة.لن يرى المستخدمون الذين لديهم
contoso-xyz.com
عناوين بريد إلكتروني عنصر Beta. في حين أن 50٪ من المستخدمين الذين لديهم@contoso.com
عناوين بريد إلكتروني سيرون عنصر Beta ، فإن 50٪ آخرين لن يروا عنصر Beta .
الخطوات التالية
لمعرفة المزيد حول عوامل تصفية الميزات، تابع إلى البرامج التعليمية التالية.