Saltar al contenido

¿Cómo puedo personalizar la respuesta de error en la API web con .NET Core?

Hola, hemos encontrado la respuesta a lo que andabas buscando, deslízate y la encontrarás aquí.

Solución:

Cuando utilice un controlador con el ApiController attribute aplicado, ASP.NET Core automáticamente maneja los errores de validación del modelo devolviendo una solicitud incorrecta 400 con ModelState como cuerpo de respuesta. Como tal, su prueba condicional ModelState.IsValid es esencialmente siempre false (y por lo tanto no ingresado) porque las únicas solicitudes que llegarán tan lejos son las válidas.

Simplemente puede quitar el ApiController attributepero eso elimina un montón de otras cosas beneficiosas que attributes agrega también. La mejor opción es usar una fábrica de respuestas personalizada:

services.Configure(o =>

    o.InvalidModelStateResponseFactory = actionContext =>
        new BadRequestObjectResult(actionContext.ModelState);
);

Eso es esencialmente lo que sucede de forma predeterminada, por lo que simplemente necesita cambiar la acción proporcionada allí en consecuencia para personalizarla según sus caprichos.

Como analizó Chris, su problema se debe a las respuestas HTTP 400 automáticas.

Para una solución rápida, puede suprimir esta característica haciendo

services.AddMvc()
        .ConfigureApiBehaviorOptions(options => 
            options.SuppressModelStateInvalidFilter = true;
        ).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

Para una manera eficiente, puede seguir la sugerencia de Chris, como a continuación:

services.AddMvc()
        .ConfigureApiBehaviorOptions(options => 
            //options.SuppressModelStateInvalidFilter = true;
            options.InvalidModelStateResponseFactory = actionContext =>
            
                var modelState = actionContext.ModelState.Values;
                return new BadRequestObjectResult(FormatOutput(modelState));
            ;
        ).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

Y, ya no es necesario definir el código a continuación en su acción.

if (!ModelState.IsValid)

    return BadRequest(FormatOutput(ModelState.Values));

Si eres capaz, puedes dejar un post acerca de qué te ha parecido esta reseña.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *