Abilitare l'implementazione a fasi di funzionalità per destinatari specifici
La destinazione è una strategia di gestione delle funzionalità che consente agli sviluppatori di implementare progressivamente nuove funzionalità alla base degli utenti. La strategia si basa sul concetto di destinazione di un set di utenti noto come gruppo di destinatari. Un gruppo di destinatari è costituito da utenti, gruppi e una percentuale designata dell'intera base utenti.
Gli utenti possono essere account utente effettivi, ma possono anche essere computer, dispositivi o qualsiasi entità identificabile in modo univoco a cui si vuole implementare una funzionalità.
I gruppi sono fino all'applicazione da definire. Ad esempio, quando la destinazione è destinata agli account utente, è possibile usare gruppi o gruppi di Microsoft Entra che denota le posizioni degli utenti. Quando si punta ai computer, è possibile raggrupparli in base alle fasi di implementazione. I gruppi possono essere qualsiasi attributo comune in base al quale categorizzare il gruppo di destinatari.
Questo articolo illustra come implementare una nuova funzionalità in un'applicazione Web ASP.NET Core a utenti e gruppi specificati usando TargetingFilter
con app Azure Configurazione.
Prerequisiti
- Completare la guida introduttiva: Aggiungere flag di funzionalità a un'app ASP.NET Core.
- Aggiornare il
Microsoft.FeatureManagement.AspNetCore
pacchetto alla versione 3.0.0 o successiva.
Creare un'applicazione Web con autenticazione e flag di funzionalità
In questa sezione si creerà un'applicazione Web che consente agli utenti di accedere e usare il flag di funzionalità beta creato in precedenza. La maggior parte dei passaggi è molto simile a quella eseguita in Avvio rapido.
Creare un'applicazione Web che esegue l'autenticazione in un database locale usando il comando seguente.
dotnet new mvc --auth Individual -o TestFeatureFlags
Aggiungere riferimenti ai pacchetti NuGet seguenti.
dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore dotnet add package Microsoft.FeatureManagement.AspNetCore
Archiviare il stringa di connessione per il negozio Configurazione app.
dotnet user-secrets init dotnet user-secrets set ConnectionStrings:AppConfig "<your_connection_string>"
Aggiornare Program.cs con il codice seguente.
// 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 // ... ...
Aggiungere Beta.cshtml nella directory Views\Home e aggiornarlo con il markup seguente.
@{ ViewData["Title"] = "Beta Page"; } <h1>This is the beta website.</h1>
Aprire HomeController.cs nella directory Controllers e aggiornarla con il codice seguente.
public IActionResult Beta() { return View(); }
Aprire _ViewImports.cshtml e registrare l'helper tag di Gestione funzionalità usando una
@addTagHelper
direttiva:@addTagHelper *, Microsoft.FeatureManagement.AspNetCore
Aprire _Layout.cshtml nella directory Views\Shared. Inserire un nuovo
<feature>
tag tra gli elementi della barra di spostamento Home e Privacy .<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>
Compilare ed eseguire. Selezionare quindi il collegamento Registra nell'angolo superiore destro per creare un nuovo account utente. Usare un indirizzo di posta elettronica di
test@contoso.com
. Nella schermata Registra conferma selezionare Fare clic qui per confermare l'account.Attivare o disattivare il flag di funzionalità in Configurazione app. Verificare che questa azione controlli la visibilità dell'elemento Beta sulla barra di spostamento.
Aggiornare il codice dell'applicazione Web da usare TargetingFilter
A questo punto, è possibile usare il flag di funzionalità per abilitare o disabilitare la Beta
funzionalità per tutti gli utenti. Per abilitare il flag di funzionalità per alcuni utenti durante la disabilitazione per altri utenti, aggiornare il codice in modo da usare TargetingFilter
. In questo esempio si usa l'indirizzo di posta elettronica dell'utente connesso come ID utente e la parte del nome di dominio dell'indirizzo di posta elettronica come gruppo. Aggiungere l'utente e il gruppo all'oggetto TargetingContext
. TargetingFilter
Usa questo contesto per determinare lo stato del flag di funzionalità per ogni richiesta.
Aggiungere ExampleTargetingContextAccessor.cs file.
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); } } }
Aprire
Program.cs
e aggiungere l'oggettoExampleTargetingContextAccessor
creato nel passaggio precedente eTargetingFilter
alla raccolta di servizi chiamando ilWithTargeting
metodo dopo la riga esistente diAddFeatureManagement
.TargetingFilter
Userà perExampleTargetingContextAccessor
determinare il contesto di destinazione ogni volta che viene valutato il flag di funzionalità.// 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 // ... ...
Nota
Per le applicazioni Blazor, vedere le istruzioni per abilitare la gestione delle funzionalità come servizi con ambito.
Aggiornare il flag di funzionalità per usare TargetingFilter
Nel portale di Azure passare all'archivio Configurazione app e selezionare Gestione funzionalità.
Selezionare il menu di scelta rapida per il flag di funzionalità Beta creato nell'avvio rapido. Seleziona Modifica
Nella schermata Modifica selezionare la casella di controllo Abilita flag di funzionalità se non è già selezionata. Selezionare quindi la casella di controllo Usa filtro funzionalità.
Selezionare il pulsante Crea.
Selezionare il filtro Destinazione nell'elenco a discesa Tipo di filtro.
Selezionare la casella di controllo Override by Groups (Sostituisci per gruppi ) e Override by Users (Override by Users ).
Selezionare le opzioni seguenti.
- Percentuale predefinita: 0
- Includi gruppi: immettere un nome di contoso.com e una percentuale di 50
- Escludi gruppi:
contoso-xyz.com
- Includi utenti:
test@contoso.com
- Escludi utenti:
testuser@contoso.com
La schermata del filtro delle funzionalità avrà un aspetto simile al seguente.
Queste impostazioni comportano il comportamento seguente.
- Il flag di funzionalità è sempre disabilitato per l'utente
testuser@contoso.com
perchétestuser@contoso.com
è elencato nella sezione Escludi utenti . - Il flag di funzionalità è sempre disabilitato per gli utenti in
contoso-xyz.com
, perchécontoso-xyz.com
è elencato nella sezione Escludi gruppi . - Il flag di funzionalità è sempre abilitato per l'utente
test@contoso.com
perchétest@contoso.com
è elencato nella sezione Includi utenti . - Il flag di funzionalità è abilitato per il 50% degli utenti nel gruppo contoso.com , perché contoso.com è elencato nella sezione Includi gruppi con una percentuale di 50.
- La funzionalità è sempre disabilitata per tutti gli altri utenti, perché la percentuale predefinita è impostata su 0.
Selezionare Aggiungi per salvare il filtro di destinazione.
Selezionare Applica per salvare queste impostazioni e tornare alla schermata Gestione funzionalità.
Il filtro funzionalità per il flag di funzionalità viene ora visualizzato come Destinazione. Questo stato indica che il flag di funzionalità è abilitato o disabilitato per ogni richiesta, in base ai criteri applicati dal filtro di funzionalità targeting .
TargetingFilter in azione
Per visualizzare gli effetti di questo flag di funzionalità, compilare ed eseguire l'applicazione. Inizialmente, l'elemento Beta non viene visualizzato sulla barra degli strumenti, perché l'opzione Percentuale predefinita è impostata su 0.
Accedere ora come test@contoso.com
, usando la password impostata durante la registrazione. L'elemento Beta viene ora visualizzato sulla barra degli strumenti, perché test@contoso.com
è specificato come utente di destinazione.
Accedere ora come testuser@contoso.com
, usando la password impostata durante la registrazione. L'elemento Beta non viene visualizzato sulla barra degli strumenti, perché testuser@contoso.com
viene specificato come utente escluso.
Il video seguente illustra questo comportamento in azione.
È possibile creare più utenti con @contoso.com
indirizzi di posta elettronica e @contoso-xyz.com
per visualizzare il comportamento delle impostazioni del gruppo.
Gli utenti con contoso-xyz.com
indirizzi di posta elettronica non vedranno l'elemento Beta . Mentre il 50% degli utenti con @contoso.com
indirizzi di posta elettronica visualizzerà l'elemento Beta , l'altro 50% non visualizzerà l'elemento Beta .