Integrando validação com APIs
Retorne respostas limpas de erros de validação.
Integrando validação com APIs é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 4 aulas no total.
Integrando o FluentValidation ao ASP.NET Core
Para validar solicitações automaticamente, registre seus validadores na injeção de dependência. O auxiliar AddValidatorsFromAssembly examina um assembly e registra todos os validadores encontrados.
using FluentValidation;
builder.Services
.AddValidatorsFromAssemblyContaining<CustomerValidator>();Middleware de validação automática
O FluentValidation moderno favorece a validação explícita, mas você pode habilitar a validação automática, que se integra à vinculação do modelo para que as solicitações inválidas sejam rejeitadas antes da execução da sua ação.
dotnet add package FluentValidation.AspNetCore
builder.Services.AddFluentValidationAutoValidation();Validadores resolvidos pela DI
Como os validadores são registrados na DI, eles podem injetar serviços como repositórios, permitindo que regras assíncronas apoiadas por bancos de dados funcionem perfeitamente na sua API.
public class UserValidator : AbstractValidator<UserRequest>
{
public UserValidator(IUserRepository repo)
{
RuleFor(u => u.Email)
.MustAsync(async (e, ct) => !await repo.ExistsAsync(e));
}
}Validação explícita em um ponto de acesso
Muitas equipes preferem a validação explícita por causa da clareza. Injete IValidator<T> e chame-o no início do handler.
app.MapPost("/users", async (
UserRequest request,
IValidator<UserRequest> validator) =>
{
var result = await validator.ValidateAsync(request);
if (!result.IsValid)
return Results.ValidationProblem(result.ToDictionary());
return Results.Ok();
});O que é ProblemDetails?
ProblemDetails (RFC 7807) é um formato JSON padrão para respostas de erro HTTP. Ele tem campos como type, title, status e detail, oferecendo aos clientes uma estrutura de erro previsível.
{
"type": "https://tools.ietf.org/html/rfc7231",
"title": "One or more validation errors occurred.",
"status": 400,
"errors": { "Email": ["Email is required."] }
}ValidationProblemDetails
Para falhas de validação, o ASP.NET Core usa ValidationProblemDetails, que estende ProblemDetails com um dicionário de errors que associa cada campo às suas mensagens.
return Results.ValidationProblem(result.ToDictionary());
// Produces a 400 ValidationProblemDetails responseConvertendo resultados do FluentValidation
A extensão ToDictionary() transforma um ValidationResult no dicionário field -> messages esperado por ValidationProblem.
var result = await validator.ValidateAsync(request);
if (!result.IsValid)
{
IDictionary<string, string[]> errors = result.ToDictionary();
return Results.ValidationProblem(errors);
}Personalizando a saída de ProblemDetails
Use AddProblemDetails e um personalizador para enriquecer cada resposta de erro, por exemplo, adicionando um identificador de rastreamento para depuração.
builder.Services.AddProblemDetails(options =>
{
options.CustomizeProblemDetails = ctx =>
ctx.ProblemDetails.Extensions["traceId"] =
ctx.HttpContext.TraceIdentifier;
});Validação em Controladores MVC
Com a validação automática habilitada e [ApiController], as ações dos controladores também retornam automaticamente ValidationProblemDetails quando uma requisição é inválida, de modo que o formato seja consistente em todos os pontos de extremidade.
[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
[HttpPost]
public IActionResult Create(UserRequest request) => Ok();
}Um Filtro de Validação para APIs Mínimas
Você pode centralizar a validação explícita com um filtro de ponto de extremidade para manter cada manipulador organizado.
app.MapPost("/users", (UserRequest r) => Results.Ok())
.AddEndpointFilter<ValidationFilter<UserRequest>>();Escolher entre Automática e Explícita
A validação automática é conveniente, mas oculta a etapa de validação; a validação explícita é mais verbosa, porém transparente e mais fácil de testar. Muitas equipes escolhem a validação explícita combinada com um filtro compartilhado para obter o melhor dos dois modelos.
Verificação Rápida
Teste a integração da validação da API.
Recapitulação
Integrar a validação significa registrar validadores com AddValidatorsFromAssembly, opcionalmente habilitar a validação automática e retornar erros como ValidationProblemDetails por meio de Results.ValidationProblem(result.ToDictionary()). A DI permite que os validadores usem repositórios para regras assíncronas, e você pode personalizar ProblemDetails ou usar filtros de ponto de extremidade para manter os manipuladores organizados.
Perguntas Frequentes
A aula “Integrando validação com APIs” é grátis?
Sim — o texto completo de “Integrando validação com APIs” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 4 aulas no total.
O que vou aprender em “Integrando validação com APIs”?
Retorne respostas limpas de erros de validação. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C# Academy?
Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Integrando validação com APIs”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C# Academy?
Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Validação com anotações de dados
- Regras do FluentValidation
- Regras personalizadas e condicionais
- Integrando validação com APIs