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.