ASP.NET Core 애플리케이션에서 대상 그룹에 기능 롤아웃
이 가이드에서는 대상 지정 필터를 사용하여 ASP.NET Core 애플리케이션의 대상 그룹에 기능을 롤아웃합니다. 대상 필터에 대한 자세한 내용은 대상 그룹층을 대상 그룹으로 기능 롤아웃를 참조하세요.
필수 조건
- 활성 구독이 있는 Azure 계정. 체험 계정 만들기
- App Configuration 저장소. 저장소를 만듭니다.
- 대상 지정 필터가 있는 기능 플래그입니다. 기능 플래그를 만듭니다.
- .NET SDK 6.0 이상.
기능 플래그를 사용하여 웹 애플리케이션 만들기
이 섹션에서는 사용자가 로그인하고 이전에 만든 베타 기능 플래그를 사용할 수 있는 웹 애플리케이션을 만듭니다.
다음 명령을 사용하여 로컬 데이터베이스에 대해 인증하는 웹 애플리케이션을 만듭니다.
dotnet new webapp --auth Individual -o TestFeatureFlags
새로 만든 TestFeatureFlags 디렉터리로 이동하고 다음 NuGet 패키지에 대한 참조를 추가합니다.
dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore dotnet add package Microsoft.FeatureManagement.AspNetCore dotnet add package Azure.Identity
다음 명령을 실행하여 애플리케이션에 대한 사용자 암호를 만듭니다.
이 명령은 Secret Manager를 사용하여 App Configuration 저장소에 대한 엔드포인트를 저장하는 비밀 이름을
Endpoints:AppConfiguration
저장합니다.<your-App-Configuration-endpoint>
자리 표시자를 App Configuration 저장소의 엔드포인트로 바꿉 있습니다. Azure Portal의 App Configuration 저장소 개요 블레이드에서 엔드포인트를 찾을 수 있습니다.dotnet user-secrets init dotnet user-secrets set Endpoints:AppConfiguration "<your-App-Configuration-endpoint>"
애플리케이션에 Azure App Configuration 및 기능 관리를 추가합니다.
App Configuration 저장소에 인증하는 데 사용합니다
DefaultAzureCredential
. 지침에 따라 자격 증명에 App Configuration 데이터 판독기 역할을 할당합니다. 애플리케이션을 실행하기 전에 권한이 전파될 수 있는 충분한 시간을 허용해야 합니다.다음 코드로 Program.cs 파일을 업데이트합니다.
// 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 // ... ...
App Configuration 미들웨어를 사용하여 Azure App Configuration에서 구성 및 기능 플래그 새로 고침을 사용하도록 설정합니다.
Program.cs를 다음 코드로 업데이트합니다.
// 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 // ... ...
Pages 디렉터리 아래에 베타라는 새로운 빈 Razor 페이지를 추가합니다. 여기에는 Beta.cshtml 및 Beta.cshtml.cs 파일 두 개가 포함되어 있습니다.
@page @model TestFeatureFlags.Pages.BetaModel @{ ViewData["Title"] = "Beta Page"; } <h1>This is the beta website.</h1>
Beta.cshtml.cs 열고 클래스에
FeatureGate
특성을 추가합니다BetaModel
.using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.FeatureManagement.Mvc; namespace TestFeatureFlags.Pages { [FeatureGate("Beta")] public class BetaModel : PageModel { public void OnGet() { } } }
Pages/_ViewImports.cshtml을 열고
@addTagHelper
지시문을 사용하여 기능 관리자 태그 도우미를 등록합니다.@addTagHelper *, Microsoft.FeatureManagement.AspNetCore
Pages/Shared 디렉터리에서 _Layout.cshtml을 엽니다. 아래 강조 표시된 줄에 표시된 대로 홈 및 개인 정보 탐색 모음 항목 사이에 새
<feature>
태그를 삽입합니다.<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>
웹 애플리케이션에 대한 대상 지정 사용
대상 지정을 사용하는 기능 평가에는 대상 지정 컨텍스트가 필요합니다. API에 매개 변수 featureManager.IsEnabledAsync
로 명시적으로 제공할 수 있습니다. ASP.NET Core에서 대상 지정 컨텍스트는 ITargetingContextAccessor 인터페이스를 구현하여 서비스 컬렉션을 통해 앰비언트 컨텍스트로 제공할 수도 있습니다.
컨텍스트 접근자 대상 지정
대상 지정 컨텍스트를 제공하려면 구현 형식을 메서드에 ITargetingContextAccessor
WithTargeting<T>
전달합니다. 형식이 제공되지 않으면 다음 코드 조각과 같이 기본 구현이 사용됩니다. 기본 대상 지정 컨텍스트 접근자가 .에 HttpContext.User.Identity.Name
UserId
대한 Groups
형식과 HttpContext.User.Claims
형식 Role
을 사용합니다. 사용자 지정이 필요한 경우 DefaultHttpTargetingContextAccessor 를 참조하여 직접 구현할 수 있습니다. 구현에 ITargetingContextAccessor
대한 자세한 내용은 대상 지정에 대한 기능 참조를 참조하세요.
// 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
// ... ...
참고 항목
Blazor 애플리케이션의 경우 범위가 지정된 서비스로 기능 관리를 사용하도록 설정하기 위한 지침을 참조하세요.
대상 지정 필터 작동 중
애플리케이션을 빌드 및 실행합니다. 처음에는 ‘기본 백분율’ 옵션이 0으로 설정되므로 ‘베타’ 항목이 도구 모음에 표시되지 않습니다.
새 사용자 계정을 만들려면 오른쪽 상단에 있는 등록 링크를 선택합니다.
test@contoso.com
의 메일 주소를 사용합니다. 등록 확인 화면에서 여기를 클릭하여 계정을 확인합니다.를 선택합니다.계정 등록 시 설정한 암호를 사용하여
test@contoso.com
으로 로그인합니다.test@contoso.com
이 대상 사용자로 지정되므로 이제 ‘베타’ 항목이 도구 모음에 표시됩니다.이제 계정 등록 시 설정한 암호를 사용하여
testuser@contoso.com
으로 로그인합니다.testuser@contoso.com
이 제외된 사용자로 지정되므로 도구 모음에 ‘베타’ 항목이 표시되지 않습니다.
다음 단계
기능 필터에 대해 자세히 알아보려면 다음 문서를 계속 진행하세요.
.NET 기능 관리 라이브러리의 전체 기능 요약을 보려면 다음 문서를 계속 진행합니다.