Szolgáltatások szakaszos bevezetésének engedélyezése a megcélzott célközönségek számára

A célzás egy funkciókezelési stratégia, amely lehetővé teszi a fejlesztők számára, hogy fokozatosan új funkciókat vezessenek be a felhasználói bázisukra. A stratégia a célközönségként ismert felhasználók egy csoportjának megcélzására épül. A célközönség meghatározott felhasználókból, csoportokból és a teljes felhasználói bázis meghatározott százalékából áll.

  • A felhasználók lehetnek tényleges felhasználói fiókok, de lehetnek gépek, eszközök vagy bármely egyedileg azonosítható entitások is, amelyeken el szeretné helyezni a funkciót.

  • A csoportok meghatározása az alkalmazáson múlik. Például a felhasználói fiókok megcélzásakor használhatja a Microsoft Entra-csoportokat vagy a felhasználói helyeket kereső csoportokat. Gépek megcélzásakor a bevezetési szakaszok alapján csoportosíthatja őket. A csoportok lehetnek olyan általános attribútumok, amelyek alapján kategorizálni szeretné a célközönséget.

Ebből a cikkből megtudhatja, hogyan hozhat létre új funkciót egy ASP.NET Core-webalkalmazásban megadott felhasználók és csoportok számára a Azure-alkalmazás Konfiguráció használatávalTargetingFilter.

Előfeltételek

Webalkalmazás létrehozása hitelesítéssel és funkciójelzőkkel

Ebben a szakaszban egy webalkalmazást fog létrehozni, amely lehetővé teszi a felhasználók számára, hogy bejelentkezhessenek, és a korábban létrehozott bétafunkció-jelzőt használják. A lépések többsége nagyon hasonlít a rövid útmutatóban ismertetett lépésekhez.

  1. Hozzon létre egy webalkalmazást, amely a következő paranccsal hitelesít egy helyi adatbázison.

    dotnet new mvc --auth Individual -o TestFeatureFlags
    
  2. Adjon hozzá hivatkozásokat a következő NuGet-csomagokhoz.

    dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore
    dotnet add package Microsoft.FeatureManagement.AspNetCore
    
  3. Tárolja az alkalmazáskonfigurációs áruház kapcsolati sztring.

    dotnet user-secrets init
    dotnet user-secrets set ConnectionStrings:AppConfig "<your_connection_string>"
    
  4. Frissítse Program.cs a következő kóddal.

    // 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. Adja hozzá a Beta.cshtml fájlt a Views\Home könyvtárban, és frissítse az alábbi korrektúrával.

    @{
        ViewData["Title"] = "Beta Page";
    }
    
    <h1>This is the beta website.</h1>
    
  6. Nyissa meg HomeController.cs a Controllers könyvtárban, és frissítse az alábbi kóddal.

    public IActionResult Beta()
    {
        return View();
    }
    
  7. Nyissa meg a _ViewImports.cshtml fájlt, és regisztrálja a funkciókezelő címkesegítőjét egy @addTagHelper irányelv használatával:

    @addTagHelper *, Microsoft.FeatureManagement.AspNetCore
    
  8. Nyissa meg a _Layout.cshtml fájlt a Views\Shared könyvtárban. Szúrjon be egy új <feature> címkét a Kezdőlap és az Adatvédelem navigációs sáv elemei közé.

    <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. Hozza létre és futtassa a modellt. Ezután a jobb felső sarokban található Regisztráció hivatkozásra kattintva hozzon létre egy új felhasználói fiókot. Használja a következő e-mail-címét test@contoso.com: . A Regisztráció megerősítése képernyőn kattintson ide a fiók megerősítéséhez.

  10. Kapcsolja be a funkciójelzőt az Alkalmazáskonfigurációban. Ellenőrizze, hogy ez a művelet szabályozza-e a bétaelem láthatóságát a navigációs sávon.

A webalkalmazás kódjának frissítése a használathoz TargetingFilter

Ezen a ponton a funkciójelző használatával engedélyezheti vagy letilthatja a szolgáltatást az Beta összes felhasználó számára. Ha engedélyezni szeretné a funkciójelzőt egyes felhasználók számára, miközben letiltja mások számára, frissítse a kódot a használatára TargetingFilter. Ebben a példában a bejelentkezett felhasználó e-mail-címét használja felhasználói azonosítóként, csoportként pedig az e-mail-cím tartománynév részét. Adja hozzá a felhasználót és a csoportot a TargetingContext. Ez TargetingFilter a környezet határozza meg az egyes kérések funkciójelzőjének állapotát.

  1. Adjon hozzá ExampleTargetingContextAccessor.cs fájlt.

    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. Nyissa meg Program.cs és adja hozzá a ExampleTargetingContextAccessor létrehozottt a korábbi lépésben és TargetingFilter a szolgáltatásgyűjteményhez a WithTargeting metódus meghívásával a meglévő sor AddFeatureManagementután. Ez TargetingFilter fogja meghatározni ExampleTargetingContextAccessor a célkörnyezetet minden alkalommal, amikor a funkciójelző kiértékelése történik.

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

A funkciójelző frissítése a TargetingFilter használatára

  1. Az Azure Portalon nyissa meg az Alkalmazáskonfigurációs áruházat, és válassza a Funkciókezelőt.

  2. Válassza ki a rövid útmutatóban létrehozott bétaverziós funkciójelző helyi menüjét. Válassza a Szerkesztés lehetőséget.

    Edit Beta feature flag

  3. A Szerkesztés képernyőn jelölje be a Funkciójelölő engedélyezése jelölőnégyzetet, ha még nincs bejelölve. Ezután jelölje be a Funkciószűrő használata jelölőnégyzetet.

  4. Válassza a Létrehozás gombot.

  5. Válassza ki a Célzás szűrőt a szűrőtípus legördülő listájában.

  6. Jelölje be a Csoportok szerinti felülbírálás és a Felhasználók általi felülbírálás jelölőnégyzetet.

  7. Válassza ki a következő beállításokat.

    • Alapértelmezett százalék: 0
    • Csoportok belefoglalása: Adja meg a contoso.com nevét és az 50 százalékos értéket
    • Csoportok kizárása: contoso-xyz.com
    • Felhasználók belefoglalása: test@contoso.com
    • Felhasználók kizárása: testuser@contoso.com

    A funkciószűrő képernyő így fog kinézni.

    Conditional feature flag

    Ezek a beállítások a következő viselkedést eredményezik.

    • A funkciójelző mindig le van tiltva a felhasználó testuser@contoso.comszámára, mert testuser@contoso.com a Felhasználók kizárása szakaszban szerepel.
    • A funkciójelző mindig le van tiltva a felhasználók számára, contoso-xyz.commert contoso-xyz.com a Csoportok kizárása szakaszban szerepel.
    • A funkciójelző mindig engedélyezve van a felhasználó test@contoso.comszámára, mert test@contoso.com a Felhasználók belefoglalása szakaszban szerepel.
    • A funkciójelző a contoso.com csoport felhasználóinak 50%-ában engedélyezve van, mert a contoso.com a Csoportok belefoglalása szakaszban 50 százalékkal szerepel.
    • A funkció mindig le van tiltva az összes többi felhasználó számára, mert az alapértelmezett százalékos érték0.
  8. Válassza a Hozzáadás lehetőséget a célszűrő mentéséhez.

  9. Az Alkalmaz gombra kattintva mentheti ezeket a beállításokat, és visszatérhet a Funkciókezelő képernyőjére.

  10. A funkciójelölő funkciószűrője mostantól célzásként jelenik meg. Ez az állapot azt jelzi, hogy a szolgáltatásjelző kérésenként engedélyezve van vagy le van tiltva a Célzási funkciószűrő által kikényszerített feltételek alapján.

TargetingFilter működés közben

A funkciójelző hatásainak megtekintéséhez hozza létre és futtassa az alkalmazást. Kezdetben a bétaelem nem jelenik meg az eszköztáron, mert az Alapértelmezett százalék beállítás értéke 0.

Most jelentkezzen be a következőként test@contoso.com: a regisztrációkor beállított jelszóval. A bétaelem most megjelenik az eszköztáron, mert test@contoso.com célfelhasználóként van megadva.

Most jelentkezzen be a következőként testuser@contoso.com: a regisztrációkor beállított jelszóval. A bétaelem nem jelenik meg az eszköztáron, mert testuser@contoso.com kizárt felhasználóként van megadva.

Az alábbi videó a működés közbeni viselkedést mutatja be.

TargetingFilter in action

A csoportbeállítások viselkedésének megtekintéséhez további felhasználókat @contoso.com és @contoso-xyz.com e-mail-címeket hozhat létre.

Az e-mail-címmel rendelkező contoso-xyz.com felhasználók nem fogják látni a bétaelemet . Míg az e-mail-címmel rendelkező @contoso.com felhasználók 50%-a látni fogja a Béta elemet, a többi 50% nem fogja látni a bétaelemet .

Következő lépések