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

440
Vistas
Respuesta de error inconsistente en la aplicación .NET 6 Web API

No puedo encontrar cómo lanzar excepciones, ya que son generadas por .NET 6 Web API. Si devuelvo BadRequest(ModelState) con errores agregados, no obtengo el mismo mensaje con estado, tipo, título, etc. Por defecto, .NET genera este tipo de errores cuando ocurre un error de validación:

 { "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1", "title": "One or more validation errors occurred.", "status": 400, "traceId": "00-488f8c0057223cbba92fc1fbfc8865d8-2341d7aba29d098f-00", "errors": { "$": [ "The JSON object contains a trailing comma at the end which is not supported in this mode. Change the reader options. Path: $ | LineNumber: 7 | BytePositionInLine: 0." ], "model": [ "The model field is required." ] }

}

Quiero configurar mi aplicación para que responda con el mismo error JSON, o quiero configurarla para que responda con los campos JSON personalizados.

Traté de agregar un middleware que detectará excepciones, pero no maneja los errores del modelo (que son manejados por el marco por sí mismo). ¿Cómo puedo manejar los errores globalmente, o cómo puedo lanzar excepciones que serán tratadas de la misma manera que el marco las maneja? ¡Cualquier enlace de documentación/tutorial es bienvenido!

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

0

Puede deshabilitar las respuestas de solicitud incorrectas predeterminadas como el siguiente código:

 builder.Services.Configure<ApiBehaviorOptions>(options => { options.SuppressModelStateInvalidFilter = true; });

Así que puedes devolver cualquier modelo que quieras en BadRequest . Sin embargo, luego debe hacer la validación del modelo usted mismo en cada punto final como:

 [HttpPost(Name = "Post1")] public IActionResult Post1(Model1 model) { if (!ModelState.IsValid) return BadRequest(new CustomApiResponse()); ... } [HttpPost(Name = "Post2")] public IActionResult Post2(Model2 model) { if (!ModelState.IsValid) return BadRequest(new CustomApiResponse()); ... }

Si desea devolver una estructura JSON global, puede crear un filtro con ActionFilterAttribute y usarlo para todos sus puntos finales, por lo que no necesita realizar la validación del modelo en cada punto final.

Filtro de validación personalizado:

 public class CustomValidationFilterAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext context) { if (!context.ModelState.IsValid) { context.Result = new BadRequestObjectResult(new GlobalApiResponse()); } base.OnActionExecuting(context); } }

Debe registrar su filtro personalizado en Program.cs

 builder.Services.AddControllers(options => { options.Filters.Add(typeof(CustomValidationFilterAttribute)); });

Esta es solo una de las formas que puede usar para lograr lo que desea, puede encontrar diferentes métodos en Internet.

over 4 years ago · Santiago Trujillo Denunciar

0

En .Net6 Web Api, si desea validar el modelo por su código y puede depurarlo, simplemente haga esto:

 public class ModelValidationFilterAttribute : ActionFilterAttribute { public override Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { if (!context.ModelState.IsValid) { context.Result = new BadRequestObjectResult(new BaseResponse() { code = ResponseCode.失败, msg = "" }); } return base.OnActionExecutionAsync(context, next); } }

Entonces hazlo en el Program.cs

 // Add services to the container. builder.Services.AddControllers(options => { //Add Your Filter options.Filters.Add<ModelValidationFilterAttribute>(); }).ConfigureApiBehaviorOptions(options => { //Disable The Default options.SuppressModelStateInvalidFilter = true; });
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