Aracılığıyla paylaş


Öğ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

Ö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.

  1. 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
    
  2. Aşağıdaki NuGet paketlerine başvurular ekleyin.

    dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore
    dotnet add package Microsoft.FeatureManagement.AspNetCore
    
  3. 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>"
    
  4. 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
    // ... ...
    
  5. 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
    // ... ...
    
  6. 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>
    
  7. 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()
            {
            }
        }
    }
    
  8. 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
    
  9. 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.

  1. 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);
            }
        }
    }
    
  2. 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 vermek ExampleTargetingContextAccessor için hizmet koleksiyonuna HttpContextekleyinHttpContextAccessor.

    // 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

  1. 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.

    Kullanıcı oturum açmadı ve Beta öğesi görüntülenmiyor

  2. 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.comkullanın. Kayıt Onayı ekranında Hesabınızı onaylamak için buraya tıklayın'ı seçin.

  3. Hesabı kaydederken ayarladığınız parolayı kullanarak olarak test@contoso.comoturum açın.

    Hedeflenen kullanıcı olarak belirtildiğinden test@contoso.com Beta öğesi artık araç çubuğunda görünür.

    Oturum açan kullanıcı ve Beta öğesi görüntüleniyor

    Şimdi hesabı kaydederken ayarladığınız parolayı kullanarak olarak testuser@contoso.comoturum açın. Beta öğesi, dışlanan bir kullanıcı olarak belirtildiğinden testuser@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.