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:
- Ferramenta Visual Studio
- Linguagem de programação C#
- Tecnologia Web API Rest
- 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.