مشاركة عبر


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

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

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

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

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

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

    dotnet new webapp --auth Individual -o TestFeatureFlags
    
  2. انتقل إلى دليل TestFeatureFlags الذي تم إنشاؤه حديثا وأضف مراجع إلى حزم NuGet التالية.

    dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore
    dotnet add package Microsoft.FeatureManagement.AspNetCore
    dotnet add package Azure.Identity
    
  3. إنشاء سر مستخدم للتطبيق عن طريق تشغيل الأوامر التالية.

    يستخدم الأمر Secret Manager لتخزين سر يسمى Endpoints:AppConfiguration، والذي يخزن نقطة النهاية لمخزن App Configuration. استبدل <your-App-Configuration-endpoint> العنصر النائب بنقطة نهاية متجر App Configuration. يمكنك العثور على نقطة النهاية في شفرة نظرة عامة على متجر App Configuration في مدخل Microsoft Azure.

    dotnet user-secrets init
    dotnet user-secrets set Endpoints:AppConfiguration "<your-App-Configuration-endpoint>"
    
  4. إضافة تكوين تطبيق Azure وإدارة الميزات إلى التطبيق الخاص بك.

    1. يمكنك استخدام DefaultAzureCredential للمصادقة على متجر App Configuration. اتبع الإرشادات لتعيين بيانات الاعتماد الخاصة بك دور قارئ بيانات تكوين التطبيق. تأكد من السماح بوقت كاف للإذن للنشر قبل تشغيل التطبيق الخاص بك.

    2. قم بتحديث ملف Program.cs بالتعليمات البرمجية التالية.

      // Existing code in Program.cs
      // ... ...
      
      using Azure.Identity;
      
      var builder = WebApplication.CreateBuilder(args);
      
      // Retrieve the endpoint
      string endpoint = builder.Configuration.GetValue<string>("Endpoints:AppConfiguration") 
          ?? throw new InvalidOperationException("The setting `Endpoints:AppConfiguration` was not found.");
      
      // Connect to Azure App Configuration and load all feature flags with no label
      builder.Configuration.AddAzureAppConfiguration(options =>
      {
          options.Connect(new Uri(endpoint), new DefaultAzureCredential())
                 .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، وأضف السمة FeatureGateBetaModel إلى الفئة .

    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>
    

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

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

استهداف ملحق السياق

لتوفير سياق الاستهداف، قم بتمرير نوع التنفيذ الخاص بك من ITargetingContextAccessor إلى WithTargeting<T> الأسلوب . إذا لم يتم توفير أي نوع، يتم استخدام تطبيق افتراضي، كما هو موضح في قصاصة التعليمات البرمجية التالية. يستخدم HttpContext.User.Identity.Name ملحق سياق الاستهداف الافتراضي ك UserId ونوع HttpContext.User.ClaimsRole ل Groups. يمكنك الرجوع إلى DefaultHttpTargetingContextAccessor لتنفيذ الخاص بك إذا كانت هناك حاجة إلى التخصيص. لمعرفة المزيد حول تنفيذ ITargetingContextAccessor، راجع مرجع الميزة للاستهداف.

// Existing code in Program.cs
// ... ...

// Add feature management to the container of services
builder.Services.AddFeatureManagement()
                .WithTargeting();

// 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 محدد كمستخدم مستبعد.

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

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

للتشغيل الكامل للميزة لمكتبة إدارة ميزات .NET، تابع إلى المستند التالي.