Table of Contents

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": "..." } ]