Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

279
Vistas
¿Cómo tener el mismo formato de respuesta para 400 respuestas planteadas desde BadRequest y validaciones?

Tengo un DTO que es un parámetro de entrada para el punto final POST de la API.

El DTO tiene anotaciones de datos y la validación se realiza automáticamente. El siguiente es un ejemplo:

 { "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1", "title": "One or more validation errors occurred.", "status": 400, "traceId": "00-f14406a8950b1005234cc79298a79586-77222ebbed97e453-00", "errors": { "Email": [ "The Email field is not a valid e-mail address." ] } }

Sin embargo, cuando quiero generar una respuesta 400 desde el controlador, uso cualquiera de los siguientes:

 return BadRequest("some message")

Esto devuelve some message

Donde así: return BadRequest(new { message = "some message"}); devoluciones:

 { "message": "some message" }

¿Cómo garantizar que se utilice el mismo formato en todo el proceso? ¿Hay alguna forma incorporada de estandarizar?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Cree un controlador api base de la siguiente manera:

 [ApiController] public abstract class ApiControllerBase : ControllerBase { protected virtual IActionResult InvalidModelState() { return HttpContext.RequestServices.GetService<IOptions<ApiBehaviorOptions>>() .Value.InvalidModelStateResponseFactory(ControllerContext); } }

Y derive sus controladores api de ApiControllerBase . Siempre que desee agregar errores y usar el mismo formato de errores de validación, simplemente agregue un ModelState.AddModelError("", "Your error message") y luego return InvalidModelState(); .

over 4 years ago · Santiago Trujillo Denunciar

0

Según la documentación: https://docs.microsoft.com/en-us/aspnet/core/web-api/?view=aspnetcore-6.0#default-badrequest-response

El tipo ValidationProblemDetails:

  • Proporciona un formato legible por máquina para especificar errores en las respuestas de la API web.
  • Cumple con la especificación RFC 7807.

Para que las respuestas automáticas y personalizadas sean consistentes, llame al método ValidationProblem en lugar de BadRequest .

ValidationProblem devuelve un objeto ValidationProblemDetails así como la respuesta automática.

Ejemplo:

 ModelState.AddModelError("Name", "Invalid name"); return ValidationProblem(ModelState);

Puede usar este concepto en todos los códigos de respuesta, por ejemplo, en lugar de 400 (predeterminado para ValidationProblem ), puede devolver 401 con el código anterior reemplazando la última línea con lo siguiente:

 return ValidationProblem(modelStateDictionary:ModelState, statusCode:401)

Sin embargo, si no desea utilizar este formato de respuesta y desea tener uno propio, debe deshabilitar el middleware responsable de la validación automática del modelo y la respuesta 400 :

En program.cs :

 builder.Services.AddControllers() .ConfigureApiBehaviorOptions(options => { options.SuppressModelStateInvalidFilter=true; });

Ahora en el controlador tendrá que hacer las validaciones usted mismo (ejemplo: verificar si hay nulos) y return BadRequest(new {error = "type something here"};

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda