Implementare le funzionalità per i destinatari di destinazione in un'applicazione ASP.NET Core
In questa guida si userà il filtro di destinazione per implementare una funzionalità per i destinatari di destinazione per l'applicazione ASP.NET Core. Per altre informazioni sul filtro di destinazione, vedere Implementare le funzionalità ai gruppi di destinatari target.
Prerequisiti
- Un account Azure con una sottoscrizione attiva. Crearne una gratuitamente.
- Un Archivio di configurazione app. Creare un archivio.
- Flag di funzionalità con filtro di destinazione. Creare il flag di funzionalità.
- .NET SDK 6.0 o versione successiva.
Creare un'applicazione Web con un flag di funzionalità
In questa sezione viene creata un'applicazione Web che consente agli utenti di accedere e usare il flag di funzionalità beta creato in precedenza.
Creare un'applicazione Web che esegue l'autenticazione in un database locale usando il comando seguente.
dotnet new webapp --auth Individual -o TestFeatureFlags
Passare alla directory TestFeatureFlags appena creata e aggiungere riferimenti ai pacchetti NuGet seguenti.
dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore dotnet add package Microsoft.FeatureManagement.AspNetCore dotnet add package Azure.Identity
Creare un segreto utente per l'applicazione eseguendo i comandi seguenti.
Il comando usa Secret Manager per archiviare un segreto denominato
Endpoints:AppConfiguration
, che archivia l'endpoint per l'archivio Configurazione app. Sostituire il segnaposto con l'endpoint<your-App-Configuration-endpoint>
dell'archivio Configurazione app. È possibile trovare l'endpoint nel pannello Panoramica dell'archivio Configurazione app nel portale di Azure.dotnet user-secrets init dotnet user-secrets set Endpoints:AppConfiguration "<your-App-Configuration-endpoint>"
Aggiungere Configurazione app di Azure e gestione delle funzionalità all'applicazione.
Usare per eseguire l'autenticazione
DefaultAzureCredential
nell'archivio Configurazione app. Seguire le istruzioni per assegnare le credenziali al ruolo lettore dati Configurazione app. Assicurarsi di consentire tempo sufficiente per la propagazione dell'autorizzazione prima di eseguire l'applicazione.Aggiornare il file Program.cs con il codice seguente.
// 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 // ... ...
Abilitare l'aggiornamento della configurazione e del flag di funzionalità da Configurazione app di Azure con il middleware di Configurazione app.
Aggiornare Program.cs con il codice seguente.
// 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 una nuova pagina Razor vuota denominata Beta nella directory Pages. Include due file Beta.cshtml e Beta.cshtml.cs.
@page @model TestFeatureFlags.Pages.BetaModel @{ ViewData["Title"] = "Beta Page"; } <h1>This is the beta website.</h1>
Aprire Beta.cshtml.cs e aggiungere l'attributo
FeatureGate
allaBetaModel
classe .using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.FeatureManagement.Mvc; namespace TestFeatureFlags.Pages { [FeatureGate("Beta")] public class BetaModel : PageModel { public void OnGet() { } } }
Aprire Pages/_ViewImports.cshtml e registrare l'helper tag di gestione funzionalità usando una direttiva
@addTagHelper
.@addTagHelper *, Microsoft.FeatureManagement.AspNetCore
Aprire _Layout.cshtml nella directory Pages/Shared. Inserire un nuovo tag
<feature>
tra gli elementi Home e Privacy della barra di spostamento, come illustrato nelle righe evidenziate di seguito.<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>
Abilitare la selezione dell'applicazione Web come destinazione
Per la valutazione delle funzionalità con la destinazione è necessario un contesto di destinazione. È possibile specificarlo come parametro per l'API featureManager.IsEnabledAsync
in modo esplicito. In ASP.NET Core il contesto di destinazione può essere fornito anche tramite la raccolta di servizi come contesto ambientale implementando l'interfaccia ITargetingContextAccessor .
Funzione di accesso del contesto di destinazione
Per fornire il contesto di destinazione, passare il tipo di implementazione di ITargetingContextAccessor
al WithTargeting<T>
metodo . Se non viene specificato alcun tipo, viene usata un'implementazione predefinita, come illustrato nel frammento di codice seguente. La funzione di accesso al contesto di destinazione predefinita usa HttpContext.User.Identity.Name
come UserId
e HttpContext.User.Claims
di tipo Role
per Groups
. È possibile fare riferimento a DefaultHttpTargetingContextAccessor per implementare la propria personalizzazione, se necessario. Per altre informazioni sull'implementazione di ITargetingContextAccessor
, vedere le informazioni di riferimento sulle funzionalità per la destinazione.
// 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
// ... ...
Nota
Per le applicazioni Blazor, vedere le istruzioni per abilitare la gestione delle funzionalità come servizi con ambito.
Filtro di destinazione in azione
Compilare ed eseguire l'applicazione. Inizialmente, l'elemento Beta non viene visualizzato sulla barra degli strumenti, perché l'opzione Percentuale predefinita è impostata su 0.
Selezionare il collegamento Registra nell'angolo in alto a destra per creare un nuovo account utente. Usare un indirizzo di posta elettronica
test@contoso.com
. Nella schermata Conferma registrazione selezionare Fare clic qui per confermare l'account.Accedere come
test@contoso.com
, usando la password impostata durante la registrazione dell'account.L'elemento Beta viene ora visualizzato sulla barra degli strumenti, perché
test@contoso.com
viene specificato come utente di destinazione.Accedere ora come
testuser@contoso.com
, usando la password impostata durante la registrazione dell'account. L'elemento Beta non viene visualizzato sulla barra degli strumenti, perchétestuser@contoso.com
viene specificato come utente escluso.
Passaggi successivi
Per altre informazioni sui filtri delle funzionalità, continuare con i documenti seguenti.
Per il rundown completo della funzionalità della libreria di gestione delle funzionalità .NET, continuare con il documento seguente.