Condividi tramite


Implementare funzionalità per gruppi di destinatari target in un'applicazione ASP.NET Core

In questa guida si userà il filtro di destinazione per implementare una funzionalità per i gruppi di destinatari target per l'applicazione ASP.NET Core. Per altre informazioni sul filtro di destinazione, vedere Implementare le funzionalità ai gruppi di destinatari target.

Prerequisiti

Creare un'applicazione Web con un flag di funzionalità

In questa sezione si crea un'applicazione Web che consente agli utenti di accedere e usare il flag di funzionalità Beta creato in precedenza.

  1. Creare un'applicazione Web che esegue l'autenticazione in un database locale usando il comando seguente.

    dotnet new webapp --auth Individual -o TestFeatureFlags
    
  2. 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
    
  3. 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 di Configurazione app. Sostituire il segnaposto <your-App-Configuration-endpoint> con l'endpoint dell'archivio di Configurazione app. È possibile trovare l'endpoint nel pannello Panoramica dell'archivio di Configurazione app nel portale di Azure.

    dotnet user-secrets init
    dotnet user-secrets set Endpoints:AppConfiguration "<your-App-Configuration-endpoint>"
    
  4. Aggiungere Configurazione app di Azure e gestione delle funzionalità all'applicazione.

    1. Usare DefaultAzureCredential per eseguire l'autenticazione nell'archivio di Configurazione app. Seguire le istruzioni per assegnare le credenziali al ruolo Lettore dati di Configurazione app. Assicurarsi di consentire tempo sufficiente per la propagazione dell'autorizzazione prima di eseguire l'applicazione.

    2. 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
      // ... ...
      
  5. 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
    // ... ...
    
  6. 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>
    
  7. Aprire Beta.cshtml.cs e aggiungere l'attributo FeatureGate alla classe BetaModel.

    using Microsoft.AspNetCore.Mvc.RazorPages;
    using Microsoft.FeatureManagement.Mvc;
    
    namespace TestFeatureFlags.Pages
    {
        [FeatureGate("Beta")]
        public class BetaModel : PageModel
        {
            public void OnGet()
            {
            }
        }
    }
    
  8. Aprire Pages/_ViewImports.cshtml e registrare l'helper tag di gestione funzionalità usando una direttiva @addTagHelper.

    @addTagHelper *, Microsoft.FeatureManagement.AspNetCore
    
  9. 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 destinazione è necessario un contesto di destinazione. È possibile specificarlo in modo esplicito come parametro per l'API featureManager.IsEnabledAsync. In ASP.NET Core, il contesto di destinazione può essere fornito anche tramite la raccolta di servizi come contesto di ambiente implementando l'interfaccia ITargetingContextAccessor.

Funzione di accesso al contesto di destinazione

Per fornire il contesto di destinazione, passare il tipo di implementazione della funzione ITargetingContextAccessor al metodo WithTargeting<T>. Se non si specifica 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 una funzione personalizzata, se necessario. Per altre informazioni sull'implementazione di ITargetingContextAccessor, vedere la guida di riferimento alle 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
// ... ...

Note

Per le applicazioni Blazor, vedere le istruzioni per abilitare la gestione delle funzionalità come servizi con ambito.

Filtro di destinazione in azione

  1. Compilare ed eseguire l'applicazione. Inizialmente, l'elemento Beta non viene visualizzato sulla barra degli strumenti, perché l'opzione Percentuale predefinita è impostata su 0.

    L'utente non ha eseguito l'accesso e l'elemento Beta non è visualizzato

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

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

    L'utente ha eseguito l'accesso e l'elemento Beta è visualizzato

    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 un resoconto completo delle caratteristiche della libreria di gestione delle funzionalità .NET, continuare con il documento seguente.