Aktifkan peluncuran fitur secara bertahap untuk audiens sasaran

Penargetan adalah strategi manajemen fitur yang memungkinkan pengembang untuk secara progresif meluncurkan fitur baru ke basis pengguna mereka. Strategi ini dibangun berdasarkan konsep menargetkan sekumpulan pengguna yang dikenal sebagai audiens target. Audiens terdiri dari pengguna, grup, dan persentase tertentu dari seluruh basis pengguna.

  • Pengguna dapat menjadi akun pengguna aktual, tetapi mereka juga dapat menjadi mesin, perangkat, atau entitas yang dapat diidentifikasi secara unik yang ingin Anda luncurkan fiturnya.

  • Grup terserah aplikasi Anda untuk didefinisikan. Misalnya, saat menargetkan akun pengguna, Anda dapat menggunakan grup atau grup Microsoft Entra yang menunjukkan lokasi pengguna. Saat menargetkan komputer, Anda dapat mengelompokkannya berdasarkan tahap peluncuran. Grup dapat berupa atribut umum apa pun berdasarkan yang ingin Anda kategorikan audiens Anda.

Dalam artikel ini, Anda mempelajari cara meluncurkan fitur baru di aplikasi web ASP.NET Core ke pengguna dan grup tertentu, menggunakan TargetingFilter dengan Azure App Configuration.

Prasyarat

Membuat aplikasi web dengan bendera autentikasi dan fitur

Di bagian ini, Anda akan membuat aplikasi web yang memungkinkan pengguna untuk masuk dan menggunakan bendera fitur Beta yang Anda buat sebelumnya. Sebagian besar langkah-langkahnya sangat mirip dengan apa yang telah Anda lakukan di Mulai Cepat.

  1. Buat aplikasi web yang mengautentikasi terhadap database lokal menggunakan perintah berikut.

    dotnet new mvc --auth Individual -o TestFeatureFlags
    
  2. Tambahkan referensi ke paket NuGet berikut.

    dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore
    dotnet add package Microsoft.FeatureManagement.AspNetCore
    
  3. Simpan string koneksi untuk penyimpanan App Configuration Anda.

    dotnet user-secrets init
    dotnet user-secrets set ConnectionStrings:AppConfig "<your_connection_string>"
    
  4. Perbarui Program.cs dengan kode berikut.

    // Existing code in Program.cs
    // ... ...
    
    var builder = WebApplication.CreateBuilder(args);
    
    // Retrieve the App Config connection string
    string AppConfigConnectionString = builder.Configuration.GetConnectionString("AppConfig");
    
    // Load 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
    // ... ...
    
    // 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
    // ... ...
    
  5. Tambahkan Beta.cshtml di bawah direktori Views\Home dan perbarui dengan markup berikut.

    @{
        ViewData["Title"] = "Beta Page";
    }
    
    <h1>This is the beta website.</h1>
    
  6. Buka HomeController.cs di bawah direktori Pengontrol dan perbarui dengan kode berikut.

    public IActionResult Beta()
    {
        return View();
    }
    
  7. Buka _ViewImports.cshtml, dan daftarkan Pengelola fitur Tag Helper menggunakan direktif @addTagHelper :

    @addTagHelper *, Microsoft.FeatureManagement.AspNetCore
    
  8. Buka _Layout.cshtml di direktori Views\Shared. Sisipkan tag baru <feature> di antara item bilah navigasi Beranda dan Privasi .

    <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
        <ul class="navbar-nav flex-grow-1">
            <li class="nav-item">
                <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
            </li>
            <feature name="Beta">
                <li class="nav-item">
                    <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Beta">Beta</a>
                </li>
            </feature>
            <li class="nav-item">
                <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
            </li>
        </ul>
        <partial name="_LoginPartial" />
    </div>
    
  9. Bangun dan jalankan. Kemudian pilih tautan Daftar di sudut kanan atas untuk membuat akun pengguna baru. Atau gunakan alamat email test@contoso.com. Pada layar Konfirmasi Pendaftaran, pilih Klik di sini untuk mengonfirmasi akun Anda.

  10. Alihkan bendera fitur di App Configuration. Validasi bahwa tindakan ini mengontrol visibilitas item Beta pada bilah navigasi.

Memperbarui kode aplikasi web yang akan digunakan TargetingFilter

Pada titik ini, Anda dapat menggunakan bendera fitur untuk mengaktifkan atau menonaktifkan fitur Beta untuk semua pengguna. Untuk mengaktifkan bendera fitur untuk beberapa pengguna saat menonaktifkannya untuk orang lain, perbarui kode Anda untuk menggunakan TargetingFilter. Dalam contoh ini, Anda menggunakan alamat email pengguna yang masuk sebagai ID pengguna, dan bagian nama domain alamat email sebagai grup. Anda menambahkan pengguna dan grup ke TargetingContext. TargetingFilter menggunakan konteks ini untuk menentukan status bendera fitur untuk setiap permintaan.

  1. Tambahkan file ExampleTargetingContextAccessor.cs .

    using Microsoft.AspNetCore.Http;
    using Microsoft.FeatureManagement.FeatureFilters;
    using System;
    using System.Collections.Generic;
    using System.Threading.Tasks;
    
    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. Buka Program.cs dan tambahkan yang ExampleTargetingContextAccessor dibuat di langkah sebelumnya dan TargetingFilter ke koleksi layanan dengan memanggil WithTargeting metode setelah baris yang ada dari AddFeatureManagement. TargetingFilter akan menggunakan ExampleTargetingContextAccessor untuk menentukan konteks penargetan setiap kali bendera fitur dievaluasi.

    // Existing code in Program.cs
    // ... ...
    
    // Add feature management to the container of services
    builder.Services.AddFeatureManagement()
                    .WithTargeting<ExampleTargetingContextAccessor>();
    
    // The rest of existing code in Program.cs
    // ... ...
    

    Catatan

    Untuk aplikasi Blazor, lihat instruksi untuk mengaktifkan manajemen fitur sebagai layanan tercakup.

Perbarui bendera fitur untuk menggunakan TargetingFilter

  1. Di portal Microsoft Azure, buka penyimpanan App Configuration Anda dan pilih Pengelola fitur.

  2. Pilih menu konteks untuk bendera fitur Beta yang Anda buat di mulai cepat. Pilih Edit.

    Edit Beta feature flag

  3. Di layar Edit, pilih kotak centang Aktifkan bendera fitur jika belum dipilih. Lalu pilih kotak centang Gunakan filter fitur.

  4. Pilih tombol Buat.

  5. Pilih filter Penargetan di menu dropdown jenis filter.

  6. Pilih kotak centang Ganti menurut Grup dan Timpa oleh Pengguna .

  7. Pilih opsi berikut.

    • Persentase default: 0
    • Sertakan Grup: Masukkan Namacontoso.com dan Persentase50
    • Kecualikan Grup: contoso-xyz.com
    • Sertakan Pengguna: test@contoso.com
    • Kecualikan Pengguna: testuser@contoso.com

    Layar filter fitur akan terlihat seperti ini.

    Conditional feature flag

    Pengaturan ini menghasilkan perilaku berikut.

    • Bendera fitur selalu dinonaktifkan untuk pengguna testuser@contoso.com, karena testuser@contoso.com tercantum di bagian Kecualikan Pengguna .
    • Bendera fitur selalu dinonaktifkan untuk pengguna di contoso-xyz.com, karena contoso-xyz.com tercantum di bagian Kecualikan Grup .
    • Bendera fitur selalu diaktifkan untuk pengguna test@contoso.com, karena test@contoso.com tercantum di bagian Sertakan Pengguna .
    • Bendera fitur diaktifkan untuk 50% pengguna dalam grup contoso.com, karena contoso.com tercantum di bagian Sertakan Grup dengan Persentase50.
    • Fitur ini selalu dinonaktifkan untuk semua pengguna lain, karena persentase Default diatur ke 0.
  8. Pilih Tambahkan untuk menyimpan filter penargetan.

  9. Pilih Terapkan untuk menyimpan pengaturan ini dan kembali ke layar Manajer fitur.

  10. Filter fitur untuk bendera fitur sekarang muncul sebagai Penargetan. Status ini menunjukkan bahwa bendera fitur diaktifkan atau dinonaktifkan berdasarkan per permintaan, berdasarkan kriteria yang diberlakukan oleh filter fitur Penargetan .

TargetingFilter beraksi

Untuk melihat efek bendera fitur ini, buat dan jalankan aplikasi. Awalnya, item Beta tidak muncul di toolbar, karena opsi Persentase default diatur ke 0.

Sekarang masuk sebagai test@contoso.com, menggunakan kata sandi yang Anda tetapkan saat mendaftar. Item Beta sekarang muncul pada toolbar, karena test@contoso.com ditentukan sebagai pengguna yang ditargetkan.

Sekarang masuk sebagai testuser@contoso.com, menggunakan kata sandi yang Anda tetapkan saat mendaftar. Item Beta tidak muncul di toolbar, karena testuser@contoso.com ditentukan sebagai pengguna yang dikecualikan.

Video berikut menunjukkan perilaku beraksi.

TargetingFilter in action

Anda dapat membuat lebih banyak pengguna dengan @contoso.com alamat email dan @contoso-xyz.com untuk melihat perilaku pengaturan grup.

Pengguna dengan contoso-xyz.com alamat email tidak akan melihat item Beta . Sementara 50% pengguna dengan @contoso.com alamat email akan melihat item Beta , 50% lainnya tidak akan melihat item Beta .

Langkah berikutnya