none
Retornar o no Excepción al cliente RRS feed

  • Pregunta

  • Buenas,

    Tengo un servicio WebApi en el cual retorno una lista de objetos y en caso de error, retorno un BadRequest:

    // GET: api/Productos
    [HttpGet]
    [ProducesResponseType(StatusCodes.Status200OK)]
    [ProducesResponseType(StatusCodes.Status400BadRequest)]
    public async Task<ActionResult<IEnumerable<Producto>>> Get()
    {
    	try
    	{
    		return await productoAppService.ListAllAsync();
    	}
    	catch (Exception ex)
    	{
    		return BadRequest(ex.Message);
    	}
    }

    Mi duda está si en el catch debo o no enviar el ex.Message. Tengo entendido que no debería hacerse por seguridad y sólo indicarle al cliente que algo ha fallado, sin embargo, el cliente desea mostrar al usuario un detalle de lo que ha fallado.

    Favor si me aclaran, muchas gracias.

    domingo, 1 de marzo de 2020 14:00

Respuestas

  • Es relativamente común hacer algo tal como lo siguiente en el "catch":

    return (TraducirExcepcion(ex));

    La función TraducirExcepcion se escribe por separado y se reutiliza en todos los métodos del WebApi en que sea necesaria. Por dentro, lo que hace es considerar los distintos tipos de excepción (y el texto de la excepción cuando sea necesario) y devolver un mensaje "saneado" en el que se aporta la explicación mínima necesaria en lugar de mostrar al completo el texto de la excepción, que a veces contiene detalles internos que no deben ser vistos por el cliente.

    domingo, 1 de marzo de 2020 14:52
  • Hola, también podrías configurar una variable de entorno que indique si estas en modo Production. Si estuvieras en desarrollo lo suyo sería devolver el mensaje completo de la traza de la excepción a modo de ayuda a depuración. 

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    domingo, 1 de marzo de 2020 17:53
    Moderador

Todas las respuestas

  • Es relativamente común hacer algo tal como lo siguiente en el "catch":

    return (TraducirExcepcion(ex));

    La función TraducirExcepcion se escribe por separado y se reutiliza en todos los métodos del WebApi en que sea necesaria. Por dentro, lo que hace es considerar los distintos tipos de excepción (y el texto de la excepción cuando sea necesario) y devolver un mensaje "saneado" en el que se aporta la explicación mínima necesaria en lugar de mostrar al completo el texto de la excepción, que a veces contiene detalles internos que no deben ser vistos por el cliente.

    domingo, 1 de marzo de 2020 14:52
  • Hola, también podrías configurar una variable de entorno que indique si estas en modo Production. Si estuvieras en desarrollo lo suyo sería devolver el mensaje completo de la traza de la excepción a modo de ayuda a depuración. 

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    domingo, 1 de marzo de 2020 17:53
    Moderador