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

235
Vistas
El filtro de excepción API devuelve 200 códigos de respuesta en excepción en ASP.NET MVC

Escribí un filtro de excepción para mi API para manejar las excepciones lanzadas en la API:

 using System; using System.Net; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] public class ApiExceptionFilter : ExceptionFilterAttribute { public override void OnException(ExceptionContext context) { // First, generate the status code based on the exception type HttpStatusCode status = context.Exception switch { UnauthorizedAccessException => HttpStatusCode.Unauthorized, ArgumentException => HttpStatusCode.BadRequest, MissingHeaderException => HttpStatusCode.BadRequest, NotFoundException => HttpStatusCode.NotFound, _ => HttpStatusCode.InternalServerError, }; // Next, inject the status code and exception message into // a new error response and set the result with it context.Result = new JsonResult(new ErrorResponse { StatusCode = status, Message = context.Exception.Message }); // Finally, call the base function base.OnException(context); } }

Esta función intercepta excepciones como se esperaba, pero el problema que tengo es que siempre devuelve una respuesta OK. ¿Cómo me aseguro de que la respuesta incluya el mensaje de excepción y que el código de respuesta no sea un valor 200?

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

0

En lugar de devolver un JsonResult , que no expone una propiedad de código de estado para establecer, devuelva un ExceptionResult y establezca el código de estado de la siguiente manera:

 context.Result = new ExceptionResult(context.Exception, true) { StatusCode = status };

Si aún desea usar su objeto ErrorResponse, simplemente use un resultado de objeto:

 context.Result = new ObjectResult(new ErrorResponse { StatusCode = status, Message = context.Exception.Message }) // set status code on result { StatusCode = status };
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