Web Api – HttpResponseException com conteúdo em json

Fala galera!

Uma dica rápida para quem precisar enviar mais informações de erro junto ao HttpResponseException. Podemos enviar essas informações dentro do Content do Response. Então por que não enviar um JSON?

Vou ensinar um jeito prático, fácil e rápido de fazer isso!!!

Primeiro vamos criar um Model para os erros. Crie uma classe chamada ErrorModel na pasta Models.

namespace WebApiJsonException.Models
{
    public class ErrorModel
    {
        public string ErrorCode { get; set; }
        public string Description { get; set; }
        public string AdditionalInformation { get; set; }
    }
}

Agora para não ter que ficar repetindo o código em todas os nossos ApiControllers, vamos criar uma classe Base para isso. No exemplo só vamos criar a função para retornar a nossa Exception, mas pode adicionar tudo que é útil aos ApiController.

Eu chamei a minha classe base de BaseApiController, segue o código dela:

using Newtonsoft.Json;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using WebApiJsonException.Models;

namespace WebApiJsonException.Controllers
{
    public class BaseApiController : ApiController
    {
        public HttpResponseException CreateHttpResponseException(HttpStatusCode code, ErrorModel errorModel)
        {
            var result = new HttpResponseException(code);
            result.Response.Content = new StringContent(JsonConvert.SerializeObject(errorModel));

            return result;
        }
    }
}

Para converter em json o nosso Model, utilizei a library Newtonsoft.Json. Quando criei o meu projeto ela já veio junto, mas caso não tenha no seu, adicione via nuget:

Install-Package Newtonsoft.Json

Para testar, altere a herança de alguma Api para BaseApiController e chame o método CreateHttpResponseException desta forma:

            throw CreateHttpResponseException(HttpStatusCode.BadRequest, new ErrorModel()
            {
                ErrorCode = "ERROR",
                Description = "Erro desconhecido",
                AdditionalInformation = "Get Values"
            });

O resultado será algo parecido com isso:

Screenshot_1

Código fonte:
https://github.com/leonardohof/WebApiJsonException

Até a próxima!


Curta também minha página no Facebook para ficar por dentro das novidades:
https://www.facebook.com/devleonardohofling