Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

436
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!