Skip to content

REST Evaluation Endpoints

The ASP.NET Core package provides REST endpoints for evaluating flags and entitlements over HTTP.

csharp
app.MapFeatureFlagEndpoints();
app.MapEntitlementEndpoints();

Package

Requires Cocoar.Configuration.AspNetCore.

Routes

Both methods generate routes for all registered flag/entitlement properties:

MethodRouteUse Case
GET/{prefix}/{ClassName}/{PropertyName}No-context flags/entitlements
POST/{prefix}/{ClassName}/{PropertyName}Contextual flags/entitlements (request body = resolver input)

Default prefixes: /flags for feature flags, /entitlements for entitlements.

Examples

GET  /flags/AppFlags/DarkMode
→ { "value": true }

POST /flags/AppFlags/BetaFeature
     { "userId": "beta_123" }
→ { "value": true }

GET  /entitlements/PlanEntitlements/MaxUsers
→ { "value": 100 }

POST /entitlements/PlanEntitlements/RateLimit
     { "tenantId": "t_123" }
→ { "value": 10000 }

Custom Path Prefix

csharp
app.MapFeatureFlagEndpoints("/api/flags");
app.MapEntitlementEndpoints("/api/entitlements");

Authorization

Both methods return a RouteGroupBuilder for chaining ASP.NET Core middleware:

csharp
app.MapFeatureFlagEndpoints()
    .RequireAuthorization("AdminPolicy");

app.MapEntitlementEndpoints()
    .RequireAuthorization();

You can also add rate limiting, CORS, or any other endpoint middleware:

csharp
app.MapFeatureFlagEndpoints()
    .RequireAuthorization()
    .RequireRateLimiting("fixed");

Error Handling

ScenarioStatusResponse
Unknown key404Not found
Invalid request body400Bad request
Evaluation error500{ "detail": "...", "title": "Flag evaluation failed", "statusCode": 500 }

How It Works

  • GET endpoints invoke the flag/entitlement delegate directly (no resolver needed)
  • POST endpoints deserialize the request body to TRequest, pass it through the registered Context Resolver, then invoke the delegate with the resolved context

The key format is {ClassName}/{PropertyName} — matching the class and property names from your code.

Released under the Apache-2.0 License.