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
- Uma conta do Azure com uma subscrição ativa. Crie um gratuitamente.
- Uma loja de configuração de aplicativos. Crie uma loja.
- Um sinalizador de recurso com filtro de segmentação. Crie o sinalizador de recurso.
- .NET SDK 6.0 ou posterior.
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.
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
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
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>"
Adicione a Configuração de Aplicativo do Azure e o gerenciamento de recursos ao seu aplicativo.
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.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 // ... ...
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 // ... ...
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>
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() { } } }
Abra Pages/_ViewImports.cshtml e registre o gerenciador de recursos Tag Helper usando uma
@addTagHelper
diretiva.@addTagHelper *, Microsoft.FeatureManagement.AspNetCore
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
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.
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.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.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, porquetestuser@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.