-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Vinícius Campos edited this page Aug 22, 2026
·
3 revisions

catch it before the whistle · English
Erros de domínio como Result, não como exceções. O domínio devolve um Error; o ASP.NET Core mapeia isso para Problem Details (RFC 7807). As mensagens ficam em catálogos JSON, não em C#.
| Página | O que cobre |
|---|---|
| Primeiros passos | Instalar, registrar e devolver a primeira resposta Problem Details |
| Conceitos |
Error, ErrorCode, ErrorKind, Result, erro primário, catálogos, escape hatch |
| Guia de domínio | Escrever código de domínio com Result<T>: factories, Custom, Bind/Map/Combine
|
| Guia ASP.NET Core |
ToHttpResult / ToActionResult, escolha do status, formato da resposta, tratamento de 500 |
| FluentValidation | Mapear falhas do FluentValidation para Error / Result do Offside |
| FastEndpoints |
UseOffside, SendOffsideAsync, erros esperados no OpenAPI |
| Integração com MediatR | Publicar erros de resultados como notificações, coletá-los por scope e tratar retries com segurança |
| Mensagens e culturas | Formato do catálogo, fallback de cultura, interpolação de {token}
|
| CLI |
offside init — skills de agente e templates de catálogo |
| Referência de API | Todos os tipos e membros públicos, em uma página |
| FAQ | Decisões de design e armadilhas comuns |
| Página | O que cobre |
|---|---|
| Arquitetura | Sete projetos, limites dos pacotes e grafo de dependências |
| Ciclo de erros e resultados | Criação, composição e mapeamento HTTP das falhas de domínio |
| Resolução de mensagens | Catálogos, fallback de cultura, interpolação e limites do Azure |
| Integrações e adaptadores | Problem Details, FluentValidation, FastEndpoints e MediatR |
| Build, testes e release | Validação da solution, CI, release e instalação CLI |
// Domínio — não sabe nada sobre HTTP
public Result<Order> Get(string id)
{
var order = _orders.Find(id);
return order is null
? Result<Order>.Failure(Error.NotFound("order", id))
: Result<Order>.Success(order);
}// Endpoint — uma linha
app.MapGet("/orders/{id}", (string id, HttpContext http) => _orders.Get(id).ToHttpResult(http));// Resposta — 404, application/problem+json
{
"type": "https://httpstatuses.io/404",
"title": "NotFound",
"status": 404,
"detail": "order '42' was not found.",
"errorCode": "NOT_FOUND",
"traceId": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01",
"errors": [
{ "code": "not_found", "errorCode": "NOT_FOUND", "kind": "NotFound", "detail": "order '42' was not found.", "field": null }
]
}O pacote core não tem dependência de ASP.NET nem de MediatR, então projetos de domínio podem referenciá-lo livremente.
Código e docs/ são canônicos · Code and docs/ are canonical · Base dbca345372483477097385eb43d850484b00ec13 · 2026-08-22 · Repositório / Repository