Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

438
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda