Compartir a través de


Implementación de características para audiencias de destino en una aplicación ASP.NET Core

En esta guía, usará el filtro de selección de destino para implementar una característica para audiencias de destino para la aplicación ASP.NET Core. Para más información sobre el filtro de destino, consulte Implementación de características en audiencias de destino.

Requisitos previos

Creación de una aplicación web con una marca de característica

En esta sección, crea una aplicación web que permite a los usuarios iniciar sesión y usar la marca de característica Beta que creó antes.

  1. Cree una aplicación web que se autentique en una base de datos local con el siguiente comando.

    dotnet new webapp --auth Individual -o TestFeatureFlags
    
  2. Vaya al directorio TestFeatureFlags recién creado y agregue referencias a los siguientes paquetes NuGet.

    dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore
    dotnet add package Microsoft.FeatureManagement.AspNetCore
    dotnet add package Azure.Identity
    
  3. Cree un secreto de usuario para la aplicación mediante la ejecución de los siguientes comandos.

    El comando usa el Administrador de secretos para almacenar un secreto denominado Endpoints:AppConfiguration, que almacena el punto de conexión para el almacén de App Configuration. Reemplace el marcador de posición <your-App-Configuration-endpoint> por el punto de conexión del almacén de App Configuration. Puede encontrar el punto de conexión en la hoja Información general del almacén de App Configuration en Azure Portal.

    dotnet user-secrets init
    dotnet user-secrets set Endpoints:AppConfiguration "<your-App-Configuration-endpoint>"
    
  4. Agregue Azure App Configuration y administración de características a la aplicación.

    1. Use DefaultAzureCredential para autenticarse en el almacén de App Configuration. Siga las instrucciones para asignar la credencial al rol Lector de datos de App Configuration. Asegúrese de dejar tiempo suficiente para que el permiso se propague antes de ejecutar la aplicación.

    2. Actualice el archivo Program.cs con el código siguiente.

      // 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. Habilite la actualización de la configuración y de la marca de características desde Azure App Configuration con el middleware App Configuration.

    Actualice Program.cs con el siguiente código.

    // 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. Agregue una nueva página de Razor vacía denominada Beta en el directorio Pages. Incluye dos archivos Beta.cshtml y Beta.cshtml.cs.

    @page
    @model TestFeatureFlags.Pages.BetaModel
    @{
        ViewData["Title"] = "Beta Page";
    }
    
    <h1>This is the beta website.</h1>
    
  7. Abra Beta.cshtml.cs y agregue el atributo FeatureGate a la clase BetaModel.

    using Microsoft.AspNetCore.Mvc.RazorPages;
    using Microsoft.FeatureManagement.Mvc;
    
    namespace TestFeatureFlags.Pages
    {
        [FeatureGate("Beta")]
        public class BetaModel : PageModel
        {
            public void OnGet()
            {
            }
        }
    }
    
  8. Abra Pages/_ViewImports.cshtml y registre el asistente de etiquetas del administrador de características mediante una directiva de @addTagHelper.

    @addTagHelper *, Microsoft.FeatureManagement.AspNetCore
    
  9. Abra _Layout.cshtml en el directorio Pages/Shared. Inserte una nueva etiqueta <feature> entre los elementos de la barra de navegación Inicio y Privacidad, tal como se muestra en las líneas resaltadas a continuación.

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

Habilitación de la selección de destino para la aplicación web

Se requiere un contexto de destino para la evaluación de características con destino. Puede proporcionarlo como parámetro para la API de featureManager.IsEnabledAsync explícitamente. En ASP.NET Core, el contexto de destino también se puede proporcionar a través de la colección de servicios como contexto ambiente mediante la implementación de la interfaz ITargetingContextAccessor.

Descriptor de acceso de contexto de destino

Para proporcionar el contexto de destino, pase el tipo de implementación del ITargetingContextAccessor al método WithTargeting<T>. Si no se proporciona ningún tipo, se usa una implementación predeterminada, como se muestra en el siguiente fragmento de código. El descriptor de acceso de contexto de destino predeterminado utiliza HttpContext.User.Identity.Name como UserId y HttpContext.User.Claims de tipo Role para Groups. Puede hacer referencia a DefaultHttpTargetingContextAccessor para implementar el suyo propio si es necesario personalizarlo. Para obtener más información acerca de la implementación de ITargetingContextAccessor, consulte la referencia de características para el destino.

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

Para las aplicaciones Blazor, consulte las instrucciones para habilitar la administración de características como servicios con ámbito.

Filtro de selección de destino en acción

  1. Compile y ejecute la aplicación. Inicialmente, el elemento Beta no aparece en la barra de herramientas, porque la opción porcentaje predeterminado está establecida en 0.

    El usuario no ha iniciado sesión y no se muestra el elemento Beta

  2. Seleccione el vínculo Registrar en la esquina superior derecha para crear una nueva cuenta de usuario. Use una dirección de correo electrónico de test@contoso.com. En la pantalla Register Confirmation (Confirmación del registro), seleccione Click here to confirm your account (Haga clic aquí para confirmar su cuenta).

  3. Inicie sesión como test@contoso.com, con la contraseña que estableció al registrar la cuenta.

    El elemento Beta ahora se muestra en la barra de herramientas, puesto que test@contoso.com está especificado como usuario de destino.

    Usuario con sesión iniciada y elemento Beta mostrado

    Ahora inicie sesión como testuser@contoso.com, con la contraseña que estableció al registrar la cuenta. El elemento Beta no aparece en la barra de herramientas porque testuser@contoso.com se especifica como un usuario excluido.

Pasos siguientes

Para más información sobre los filtros de características, continúe con los siguientes documentos.

Para obtener la lista completa de características de la biblioteca de administración de características de .NET, continúe con el siguiente documento.