Partilhar via


Implementar recursos para públicos-alvo em um aplicativo ASP.NET Core

Neste guia, você usará o filtro de segmentação para implantar um recurso para públicos-alvo para seu aplicativo ASP.NET Core. Para obter mais informações sobre o filtro de segmentação, consulte Implantar recursos para públicos-alvo.

Pré-requisitos

Criar um aplicativo Web com um sinalizador de recurso

Nesta seção, você cria um aplicativo Web que permite que os usuários entrem e usem o sinalizador de recurso Beta criado anteriormente.

  1. Crie um aplicativo Web que se autentique em um banco de dados local usando o comando a seguir.

    dotnet new webapp --auth Individual -o TestFeatureFlags
    
  2. Navegue até o diretório TestFeatureFlags recém-criado e adicione referências aos seguintes pacotes NuGet.

    dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore
    dotnet add package Microsoft.FeatureManagement.AspNetCore
    dotnet add package Azure.Identity
    
  3. Crie um segredo de usuário para o aplicativo executando os seguintes comandos.

    O comando usa o Gerenciador Secreto para armazenar um segredo chamado Endpoints:AppConfiguration, que armazena o ponto de extremidade da sua loja de Configuração de Aplicativos. Substitua o espaço reservado <your-App-Configuration-endpoint> pelo ponto de extremidade da sua loja de Configuração de Aplicativos. Você pode encontrar o ponto de extremidade na folha Visão geral da sua loja de Configuração de Aplicativo no portal do Azure.

    dotnet user-secrets init
    dotnet user-secrets set Endpoints:AppConfiguration "<your-App-Configuration-endpoint>"
    
  4. Adicione a Configuração de Aplicativo do Azure e o gerenciamento de recursos ao seu aplicativo.

    1. Você usa o para autenticar em DefaultAzureCredential sua loja de configuração de aplicativos. Siga as instruções para atribuir à sua credencial a função de Leitor de Dados de Configuração do Aplicativo. Certifique-se de dar tempo suficiente para que a permissão se propague antes de executar seu aplicativo.

    2. Atualize o arquivo Program.cs com o código a seguir.

      // 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 a atualização da configuração e do sinalizador de recursos da Configuração do Aplicativo do Azure com o middleware de Configuração do Aplicativo.

    Atualize Program.cs com o código a seguir.

    // 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. Adicione uma nova página vazia do Razor chamada Beta no diretório Pages. Ele inclui dois arquivos Beta.cshtml e Beta.cshtml.cs.

    @page
    @model TestFeatureFlags.Pages.BetaModel
    @{
        ViewData["Title"] = "Beta Page";
    }
    
    <h1>This is the beta website.</h1>
    
  7. Abra Beta.cshtml.cs e adicione o FeatureGate atributo à BetaModel classe.

    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 e registre o gerenciador de recursos Tag Helper usando uma @addTagHelper diretiva.

    @addTagHelper *, Microsoft.FeatureManagement.AspNetCore
    
  9. Abra _Layout.cshtml no diretório Pages/Share . Insira uma nova <feature> etiqueta entre os itens da barra de navegação Início e Privacidade, conforme mostrado nas linhas realçadas abaixo.

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

Habilitar a segmentação para o aplicativo Web

Um contexto de segmentação é necessário para a avaliação de recursos com segmentação. Você pode fornecê-lo como um parâmetro para a featureManager.IsEnabledAsync API explicitamente. No ASP.NET Core, o contexto de segmentação também pode ser fornecido por meio da coleção de serviços como um contexto ambiente, implementando a interface ITargetingContextAccessor .

Segmentando o acessador de contexto

Para fornecer o contexto de segmentação, passe o tipo de implementação do ITargetingContextAccessor para o WithTargeting<T> método. Se nenhum tipo for fornecido, uma implementação padrão será usada, conforme mostrado no trecho de código a seguir. O acessador de contexto de segmentação padrão utiliza HttpContext.User.Identity.Name como UserId e HttpContext.User.Claims do tipo Role para Groups. Você pode fazer referência ao DefaultHttpTargetingContextAccessor para implementar o seu próprio se a personalização for necessária. Para saber mais sobre como implementar o ITargetingContextAccessor, consulte a referência de recurso para segmentação.

// 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 aplicativos Blazor, consulte instruções para habilitar o gerenciamento de recursos como serviços com escopo.

Filtro de segmentação em ação

  1. Compile e execute a aplicação. Inicialmente, o item Beta não aparece na barra de ferramentas, porque a opção Porcentagem padrão está definida como 0.

    Usuário não conectado e item Beta não exibido

  2. Selecione o link Registrar no canto superior direito para criar uma nova conta de usuário. Use um endereço de e-mail de test@contoso.com. No ecrã de Confirmação de Registo, selecione Clique aqui para confirmar a sua conta.

  3. Inicie sessão como test@contoso.com, utilizando a palavra-passe que definiu ao registar a conta.

    O item Beta agora aparece na barra de ferramentas, porque test@contoso.com é especificado como um usuário de destino.

    Usuário conectado e item Beta exibido

    Agora inicie sessão como testuser@contoso.com, utilizando a palavra-passe que definiu ao registar a conta. O item Beta não aparece na barra de ferramentas, porque testuser@contoso.com é especificado como um usuário excluído.

Próximos passos

Para saber mais sobre os filtros de recursos, continue para os seguintes documentos.

Para obter o resumo completo dos recursos da biblioteca de gerenciamento de recursos do .NET, continue para o documento a seguir.