Model-Bound Operations
Arc supports minimal API-style endpoints for commands and queries, called model-bound operations. These endpoints are registered automatically by the Arc infrastructure and follow a convention-based naming scheme (Execute<TypeName>).
Because model-bound endpoints do not use traditional controller actions, the standard CommandResultOperationTransformer and QueryResultOperationTransformer transformers do not apply to them. The ModelBound.CommandOperationTransformer and ModelBound.QueryOperationTransformer fill this gap.
Registration
Section titled “Registration”Model-bound transformers are included automatically when you call AddConcepts():
builder.Services.AddOpenApi(options => options.AddConcepts());They can also be registered independently:
builder.Services.AddOpenApi(options => options.AddModelBoundOperationTransformers());Command operations
Section titled “Command operations”The ModelBound.CommandOperationTransformer matches operations whose operationId starts with Execute and resolves the command type from the registered ICommandHandlerProviders.
For matched operations it:
- Sets the
requestBodyto a schema of the command type. - Sets the 200 response schema to
CommandResultorCommandResult<T>(depending on the handler return type). - Adds 400, 403, and 500 error response schemas.
// The command is automatically discovered and the endpoint is documented[Command]public record CreateInvoice(CustomerId Customer, decimal Amount){ public Task Handle() { ... }}Query operations
Section titled “Query operations”The ModelBound.QueryOperationTransformer matches operations whose operationId starts with Execute and resolves the query performer from the registered IQueryPerformerProviders.
For matched operations it:
- Adds each query parameter from the performer’s parameter list as a query string parameter.
- Adds paging and sorting parameters when
IQueryPerformer.SupportsPagingistrue. - Sets the 200 response schema to
QueryResult. - Adds 400, 403, and 500 error response schemas.
Pagination and sorting parameters
Section titled “Pagination and sorting parameters”For query performers that support paging, the following query parameters are added:
| Parameter | Type | Description |
|---|---|---|
sortby | string | Field name to sort by |
sortDirection | string (asc | desc) | Sort direction |
pageSize | integer | Number of items per page |
page | integer | Page number (0-based) |