이 가이드에서는 대상 지정 필터를 사용하여 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 열고
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.AspNetCorePages/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 인터페이스를 구현하여 서비스 컬렉션을 통해 앰비언트 컨텍스트로 제공할 수도 있습니다.
컨텍스트 접근자 대상 지정
대상 지정 컨텍스트를 제공하려면 구현 형식을 메서드에 ITargetingContextAccessorWithTargeting<T> 전달합니다. 형식이 제공되지 않으면 다음 코드 조각과 같이 기본 구현이 사용됩니다. 기본 대상 지정 컨텍스트 접근자가 .에 HttpContext.User.Identity.NameUserId 대한 HttpContext.User.Claims형식과 Role 형식 Groups 을 사용합니다. 사용자 지정이 필요한 경우 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 기능 관리 라이브러리의 전체 기능 요약을 보려면 다음 문서를 계속 진행합니다.