Artigo

Pegando a Exception na API

image

Olá pessoal hoje eu vou falar e mostrar como faço para pegar o erro na API e ao mesmo tempo transformar esse erro em JSon para exibir o retorno a quem chamou o serviço. Principalmente quando existe o catch(Exception ex) dentro da Controller. O bom é mesmo logar os erros ao invés de retornar ao usuário, mas nesse caso eu vou retornar o erro em fomato diferente.

O retorno para ser utilizado pelo BadRequest é melhor está em formato JSon do que em outro formato.

Veja o que eu utilizei:

  1. Ferramenta Visual Studio
  2. Linguagem de programação C#
  3. Tecnologia Web API Rest
  4. Framework .NETCore

Uma coisa é utilizar o ILogger para registrar todos os logs, mas nesse caso eu quero mostrar como retornar o BadRequest com o formato JSon para quem chamou o serviço.

O primeiro passo do método é colocar o try e o catch. O código 1.1 mostra o método Post que chama um serviço mas pode dar problema no meio do caminho.

Código 1.1 - Método Post

/// <summary>
/// Start process migration
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<ActionResult<bool>> Post()
{
	try
	{
		await this._service.ProcessMigration();

		return Ok(true);
	}
	catch (Exception ex)
	{
		return BadRequest(GetExceptionMessage(ex));
	}
}

O catch (Exception ex) pega qualquer tipo de erro em qualquer parte do código dentro do try. A exception loga usando o ILogger mas também retorna o BadRequest. Note que existe o GetExceptionMessage que é um método que pega o erro e trabalha com ele, vou falar mais dele no código 1.2.

Código 1.2 - Pegando o tipo de erro

public static string GetExceptionMessage(Exception ex)
{
	return $"Type: {ex.GetType().ToString()} - Message: {ex.Message}";
}

O código 1.2 serve para formatar os valores pegando o tipo GetType() e a mensagem de erro vinda de qualquer lugar. Você pode fazer isso em qualquer lugar do seu código inclusive. Isso te ajuda a entender e registrar todos os erros incluindo log e tudo mais.

Bom, eu fico por aqui e qualquer dúvida pode entrar em contato por mim pelo Instagram @mauriciojunior_net e pelo site pessoal www.mauriciojunior.net.

  • Mauricio Junior

    Mauricio Junior