البرنامج التعليمي: طرح الميزات للجماهير المستهدفة في تطبيق ASP.NET Core

في هذا البرنامج التعليمي، ستستخدم عامل تصفية الاستهداف لنشر ميزة للجمهور المستهدف لتطبيق ASP.NET Core. لمزيد من المعلومات حول عامل تصفية الاستهداف، راجع طرح الميزات للجماهير المستهدفة.

المتطلبات الأساسية

إنشاء تطبيق ويب مع علامة ميزة

في هذا القسم، ستقوم بإنشاء تطبيق ويب يسمح للمستخدمين بتسجيل الدخول واستخدام علامة ميزة Beta التي قمت بإنشائها من قبل.

  1. إنشاء تطبيق ويب يصادق على قاعدة بيانات محلية باستخدام الأمر التالي.

    dotnet new webapp --auth Individual -o TestFeatureFlags
    
  2. أضف مراجع إلى حزم NuGet التالية.

    dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore
    dotnet add package Microsoft.FeatureManagement.AspNetCore
    
  3. تخزين سلسلة الاتصال لمتجر App Configuration.

    dotnet user-secrets init
    dotnet user-secrets set ConnectionStrings:AppConfig "<your_connection_string>"
    
  4. إضافة تكوين تطبيق 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
    // ... ...
    
  5. تمكين تحديث علامة الميزة والتكوين من 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
    // ... ...
    
  6. أضف صفحة Razor فارغة جديدة تسمى Beta ضمن دليل Pages. يتضمن ملفين Beta.cshtml و Beta.cshtml.cs.

    @page
    @model TestFeatureFlags.Pages.BetaModel
    @{
        ViewData["Title"] = "Beta Page";
    }
    
    <h1>This is the beta website.</h1>
    
  7. افتح 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()
            {
            }
        }
    }
    
  8. افتح Pages/_ViewImports.cshtml، وسجل مدير الميزات Tag Helper باستخدام @addTagHelper توجيه.

    @addTagHelper *, Microsoft.FeatureManagement.AspNetCore
    
  9. افتح _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>
    

تمكين الاستهداف لتطبيق الويب

يقوم عامل تصفية الاستهداف بتقييم حالة ميزة المستخدم استنادا إلى سياق استهداف المستخدم، والذي يتضمن معرف المستخدم والمجموعات التي ينتمي إليها المستخدم. في هذا المثال، يمكنك استخدام عنوان البريد الإلكتروني للمستخدم الذي سجل الدخول كمعرف المستخدم واسم مجال عنوان البريد الإلكتروني كمجموعة.

  1. أضف ملف 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);
            }
        }
    }
    
  2. افتح ملف 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، راجع إرشادات تمكين إدارة الميزات كخدمات محددة النطاق.

تصفية الاستهداف قيد التنفيذ

  1. إنشاء التطبيق وتشغيله. مبدئيًا، لا يظهر عنصر إصدار بيتا على شريط الأدوات، لأنه تم تعيين خيار النسبة المئوية الافتراضية على 0.

    لم يتم تسجيل دخول المستخدم ولم يتم عرض عنصر Beta

  2. حدد رابط Register في الزاوية العلوية اليسرى لإنشاء حساب مستخدم جديد. استخدم عنوان بريد إلكتروني لـ test@contoso.com. في شاشة تأكيد التسجيل، حدد انقر هنا لتأكيد حسابك.

  3. سجل الدخول باسم test@contoso.com، باستخدام كلمة المرور التي قمت بتعيينها عند تسجيل الحساب.

    يظهر عنصر بيتا الآن على شريط الأدوات، لأنه تم تحديد test@contoso.com كمستخدم مستهدف.

    قام المستخدم بتسجيل الدخول وعرض عنصر Beta

    سجل الدخول الآن باسم testuser@contoso.com، باستخدام كلمة المرور التي قمت بتعيينها عند تسجيل الحساب. لا يظهر عنصر Beta على شريط الأدوات، لأنه testuser@contoso.com محدد كمستخدم مستبعد.

    يمكنك إنشاء المزيد من المستخدمين باستخدام @contoso.com عناوين البريد الإلكتروني و @contoso-xyz.com لرؤية سلوك إعدادات المجموعة.

    لن يرى المستخدمون الذين لديهم contoso-xyz.com عناوين بريد إلكتروني عنصر Beta. في حين أن 50٪ من المستخدمين الذين لديهم @contoso.com عناوين بريد إلكتروني سيرون عنصر Beta ، فإن 50٪ آخرين لن يروا عنصر Beta .

الخطوات التالية

لمعرفة المزيد حول عوامل تصفية الميزات، تابع إلى البرامج التعليمية التالية.