Condividi tramite


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

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.

  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 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>"
    
  4. Aggiungere Configurazione app di Azure e gestione delle funzionalità all'applicazione.

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

    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 BetaModel classe .

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

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