C# Academy · Lección

Integración de la validación con las API

Devuelva respuestas claras con errores de validación.

Lección 4 de 413 pasos

Integración de la validación con las API es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 4 lecciones en total.

Integración de FluentValidation en ASP.NET Core

Para validar automáticamente las solicitudes, registre los validadores mediante la inyección de dependencias. El auxiliar AddValidatorsFromAssembly examina un ensamblado y registra todos los validadores que encuentra.

using FluentValidation;

builder.Services
    .AddValidatorsFromAssemblyContaining<CustomerValidator>();

Middleware de validación automática

FluentValidation moderno favorece la validación explícita, pero puede habilitar la validación automática, que se integra con el enlace de modelos para rechazar las solicitudes no válidas antes de ejecutar su acción.

dotnet add package FluentValidation.AspNetCore

builder.Services.AddFluentValidationAutoValidation();

Validadores resueltos mediante DI

Como los validadores se registran mediante DI, pueden inyectar servicios como repositorios, lo que permite que las reglas asíncronas respaldadas por la base de datos funcionen sin problemas en su API.

public class UserValidator : AbstractValidator<UserRequest>
{
    public UserValidator(IUserRepository repo)
    {
        RuleFor(u => u.Email)
            .MustAsync(async (e, ct) => !await repo.ExistsAsync(e));
    }
}

Validación explícita en un endpoint

Muchos equipos prefieren la validación explícita por claridad. Inyecte IValidator<T> y llámelo al principio del controlador.

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();
});

¿Qué es ProblemDetails?

ProblemDetails (RFC 7807) es un formato JSON estándar para las respuestas de error HTTP. Incluye campos como type, title, status y detail, lo que proporciona a los clientes una estructura de error predecible.

{
  "type": "https://tools.ietf.org/html/rfc7231",
  "title": "One or more validation errors occurred.",
  "status": 400,
  "errors": { "Email": ["Email is required."] }
}

ValidationProblemDetails

Para los errores de validación, ASP.NET Core usa ValidationProblemDetails, que amplía ProblemDetails con un diccionario errors que asigna cada campo a sus mensajes.

return Results.ValidationProblem(result.ToDictionary());
// Produces a 400 ValidationProblemDetails response

Conversión de resultados de FluentValidation

La extensión ToDictionary() convierte un ValidationResult en el diccionario field -> messages que espera ValidationProblem.

var result = await validator.ValidateAsync(request);
if (!result.IsValid)
{
    IDictionary<string, string[]> errors = result.ToDictionary();
    return Results.ValidationProblem(errors);
}

Personalización de la salida de ProblemDetails

Use AddProblemDetails y un personalizador para enriquecer todas las respuestas de error; por ejemplo, añadiendo un identificador de seguimiento para la depuración.

builder.Services.AddProblemDetails(options =>
{
    options.CustomizeProblemDetails = ctx =>
        ctx.ProblemDetails.Extensions["traceId"] =
            ctx.HttpContext.TraceIdentifier;
});

Validación en controladores MVC

Con la validación automática habilitada y [ApiController], las acciones del controlador también devuelven automáticamente ValidationProblemDetails cuando una solicitud no es válida, de modo que el formato es coherente en todos los endpoints.

[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
    [HttpPost]
    public IActionResult Create(UserRequest request) => Ok();
}

Un filtro de validación para Minimal APIs

Puede centralizar la validación explícita con un filtro de endpoint para que cada controlador mantenga un código limpio.

app.MapPost("/users", (UserRequest r) => Results.Ok())
   .AddEndpointFilter<ValidationFilter<UserRequest>>();

Elegir entre validación automática y explícita

La validación automática es práctica, pero oculta el paso de validación; la validación explícita es más verbosa, pero transparente y más fácil de probar. Muchos equipos eligen la validación explícita junto con un filtro compartido para obtener lo mejor de ambas opciones.

Comprobación rápida

Pruebe la integración de la validación de la API.

Resumen

Integrar la validación implica registrar los validadores con AddValidatorsFromAssembly, habilitar opcionalmente la validación automática y devolver los errores como ValidationProblemDetails mediante Results.ValidationProblem(result.ToDictionary()). La inyección de dependencias permite que los validadores usen repositorios para reglas asíncronas, y puede personalizar ProblemDetails o usar filtros de endpoint para mantener limpios los controladores.

Gratis para empezar

Aprende C# con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
93
Lecciones
346

Preguntas frecuentes

¿La lección «Integración de la validación con las API» es gratis?

Sí — el texto completo de «Integración de la validación con las API» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Integración de la validación con las API»?

Devuelva respuestas claras con errores de validación. Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C# Academy?

No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Integración de la validación con las API»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C# Academy?

Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Validación con Data Annotations
  2. Reglas de FluentValidation
  3. Reglas personalizadas y condicionales
  4. Integración de la validación con las API
← Volver a C# Academy