Skip to main content

Modern API Features (ASP.NET Core 7+)

Route Groups

var productsApi = app.MapGroup("/api/products")
.WithTags("Products")
.RequireAuthorization()
.WithOpenApi();

productsApi.MapGet("/", GetAll);
productsApi.MapGet("/{id}", GetById);
productsApi.MapPost("/", Create);

Endpoint Filters

app.MapGet("/api/products/{id}", GetProduct)
.AddEndpointFilter(async (context, next) =>
{
var id = context.GetArgument<int>(0);
if (id <= 0)
return Results.BadRequest("Invalid ID");

return await next(context);
});

Rate Limiting

builder.Services.AddRateLimiter(options =>
{
options.AddFixedWindowLimiter("fixed", options =>
{
options.Window = TimeSpan.FromSeconds(10);
options.PermitLimit = 5;
});
});

app.UseRateLimiter();

app.MapGet("/api/products", GetAll)
.RequireRateLimiting("fixed");

Output Caching

builder.Services.AddOutputCache(options =>
{
options.AddBasePolicy(builder => builder.Cache());
});

app.UseOutputCache();

app.MapGet("/api/products", GetAll)
.CacheOutput(policy => policy.Expire(TimeSpan.FromMinutes(5)));

Request Deduplication

Built-in with output caching to handle duplicate concurrent requests.

Resources