Aracılığıyla paylaş


ASP.NET Core uygulamasında özellikleri hedef kitlelere sunma

Bu kılavuzda, ASP.NET Core uygulamanız için hedeflenen hedef kitlelere bir özellik göstermek için 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. Yeni oluşturulan TestFeatureFlags dizinine gidin ve aşağıdaki NuGet paketlerine başvurular ekleyin.

    dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore
    dotnet add package Microsoft.FeatureManagement.AspNetCore
    dotnet add package Azure.Identity
    
  3. Aşağıdaki komutları çalıştırarak uygulama için bir kullanıcı gizli dizisi oluşturun.

    komutu, Uygulama Yapılandırması deponuzun uç noktasını depolayan adlı gizli diziyi depolamak için Gizli Dizi Yöneticisi'niEndpoints:AppConfiguration. Yer tutucuyu <your-App-Configuration-endpoint> Uygulama Yapılandırması deponuzun uç noktasıyla değiştirin. Uç noktayı Azure portalında Uygulama Yapılandırması mağazanızın Genel Bakış dikey penceresinde bulabilirsiniz.

    dotnet user-secrets init
    dotnet user-secrets set Endpoints:AppConfiguration "<your-App-Configuration-endpoint>"
    
  4. Uygulamanıza Azure Uygulaması Yapılandırması ve özellik yönetimi ekleyin.

    1. Uygulama Yapılandırması deponuzda kimlik doğrulaması yapmak için öğesini kullanırsınızDefaultAzureCredential. Kimlik bilgilerinizi Uygulama Yapılandırması Veri Okuyucusu rolü atamak için yönergeleri izleyin. Uygulamanızı çalıştırmadan önce iznin yayılması için yeterli süreye izin verdiğinden emin olun.

    2. Program.cs dosyasını aşağıdaki kodla güncelleştirin.

      // 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. 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 özniteliğini FeatureGate sınıfına BetaModel ekleyin.

    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 <feature> gezinti çubuğu öğelerinin arasına yeni 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 ile özellik değerlendirmesi için bir hedefleme bağlamı gereklidir. Bunu AÇıKÇA API'ye featureManager.IsEnabledAsync parametre olarak sağlayabilirsiniz. ASP.NET Core'da hedefleme bağlamı, ITargetingContextAccessor arabirimi uygulanarak hizmet koleksiyonu aracılığıyla ortam bağlamı olarak da sağlanabilir.

Hedefleme Bağlam Erişimcisi

Hedefleme bağlamını sağlamak için uygulama türünüzü ITargetingContextAccessor yöntemine WithTargeting<T> geçirin. Hiçbir tür sağlanmamışsa, aşağıdaki kod parçacığında gösterildiği gibi varsayılan bir uygulama kullanılır. Varsayılan hedefleme bağlamı erişimcisi için HttpContext.User.Identity.Nametürü ve UserIdHttpContext.User.Claims türü olarak Role kullanılırGroups. Özelleştirme gerekiyorsa kendi uygulamanızı uygulamak için DefaultHttpTargetingContextAccessor'a başvurabilirsiniz. uygulamasını uygulama ITargetingContextAccessorhakkında daha fazla bilgi edinmek için hedefleme için özellik başvurusuna bakın.

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

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.

    öğ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.

Sonraki adımlar

Özellik filtreleri hakkında daha fazla bilgi edinmek için aşağıdaki belgelere geçin.

.NET özellik yönetimi kitaplığının tam özellik çalıştırması için aşağıdaki belgeye geçin.