Response Wrapping
MapCrud supports two optional response wrappers — an envelope wrapper and a pagination wrapper — that can be enabled globally or overridden per entity.
Envelope
The envelope wrapper adds success and errors fields to every GET response.
Enable globally
builder.Services.AddMapCrud(o => o.UseEnvelope());
Enable per entity
app.MapCrud<Product>("products", o => o.UseEnvelope());
Disable per entity (when global is enabled)
app.MapCrud<Order>("orders", o => o.DisableEnvelope());
JSON shape
GET list with envelope:
{
"success": true,
"data": [ { "id": "...", "name": "..." } ],
"errors": []
}
GET by-id with envelope:
{
"success": true,
"data": { "id": "...", "name": "..." },
"errors": []
}
Pagination
The pagination wrapper adds total, page, and pageSize metadata to GET list responses.
Enable globally
builder.Services.AddMapCrud(o => o.UsePagination(defaultPageSize: 20));
Enable per entity with custom page size
app.MapCrud<Order>("orders", o => o.UsePagination(pageSize: 50));
Query parameters
GET /products?page=2&pagesize=10
JSON shape
{
"data": [ { "id": "...", "name": "..." } ],
"total": 142,
"page": 2,
"pageSize": 10
}
Combined Envelope + Pagination
When both are enabled, MapCrud uses a flat merge layout (no nested sub-objects):
{
"success": true,
"data": [ ... ],
"total": 142,
"page": 2,
"pageSize": 10,
"errors": []
}
Default behavior (no wrapping)
When neither envelope nor pagination is enabled, GET endpoints return the raw data directly:
[ { "id": "...", "name": "..." } ]
Related Features
- Pagination — Query parameters for page and pagesize
- Operation Configuration — Disable specific endpoints