Compartir vía


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

El filtro de selección de destino evalúa el estado de la característica de un usuario en función del contexto de selección de destino del usuario, que comprende el identificador de usuario y los grupos a los que pertenece el usuario. En este ejemplo, usará la dirección de correo electrónico del usuario con la sesión iniciada como id. de usuario y el nombre de dominio de la dirección de correo electrónico como grupo.

  1. Agregue un archivo ExampleTargetingContextAccessor.cs con el código siguiente. Implemente la interfaz ITargetingContextAccessor para proporcionar el contexto de selección de destino para el usuario que ha iniciado sesión de la solicitud actual.

    using Microsoft.FeatureManagement.FeatureFilters;
    
    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);
            }
        }
    }
    
  2. Abra el archivo Program.cs y habilite el filtro de selección de destino llamando al método WithTargeting. Pase el tipo ExampleTargetingContextAccessor que usará el filtro de selección de destino para obtener el contexto de selección de destino durante la evaluación de la marca de características. Agregue HttpContextAccessor a la colección de servicios para permitir que ExampleTargetingContextAccessor acceda a la información del usuario registrado del HttpContext.

    // Existing code in Program.cs
    // ... ...
    
    // Add feature management to the container of services
    builder.Services.AddFeatureManagement()
                    .WithTargeting<ExampleTargetingContextAccessor>();
    
    // Add HttpContextAccessor to the container of services.
    builder.Services.AddHttpContextAccessor();
    
    // 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.

    Puede crear usuarios adicionales con las direcciones de correo electrónico de @contoso.com y @contoso-xyz.com para ver el comportamiento de la configuración del grupo.

    Los usuarios con las direcciones de correo electrónico de contoso-xyz.com no verán el elemento Beta. Aunque el 50 % de los usuarios con direcciones de correo electrónico de @contoso.com verán el elemento Beta, el otro 50 % no verá el elemento Beta.

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.