| 123456789101112131415161718192021222324252627 |
- using Microsoft.Extensions.Options;
- using SharedKernel;
- namespace Web.Api.Extensions;
- /// <summary>
- /// appsettings Features 섹션 기반 엔드포인트 게이트.
- /// 플래그가 꺼져 있으면 매핑된 라우트가 404(NotFound)를 반환한다 — 라우트/핸들러 코드는 보존.
- /// 사용: <c>.RequireFeature(c => c.Channel)</c>
- /// </summary>
- public static class FeatureGateExtensions
- {
- public static TBuilder RequireFeature<TBuilder>(this TBuilder builder, Func<AppSettings.FeaturesSection, bool> feature) where TBuilder : IEndpointConventionBuilder
- {
- builder.AddEndpointFilter(async (context, next) => {
- var settings = context.HttpContext.RequestServices.GetRequiredService<IOptions<AppSettings>>().Value;
- if (!feature(settings.Features))
- {
- return Results.NotFound();
- }
- return await next(context);
- });
- return builder;
- }
- }
|