quinta-feira, 15 de janeiro de 2015

Custom errors and error detail policy in ASP.NET Web API

Hoje tentei debugar um serviço Web API que fiz deploy para um servidor remoto. O serviço estava retornando um erro http 500, sem os detalhes da exception.

HTTP/1.1 500 Internal Server Error
Content-Length: 89
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/8.0
X-Powered-By: ASP.NET
Date: Thu, 15 Jan 2015 17:03:10 GMT

{
   "$type":"System.Web.Http.HttpError, System.Web.Http",
   "Message":"An error has occurred."
}

A primeira coisa que tentei foi desabilitar os Custom erros no web.config:

<customErrors mode="Off" />

...porém isso não mudou nada. Depois de pesquisar bastante eu percebi que o Web API usa uma configuração diferente para detalhar os erros das exceptions.

GlobalConfiguration.Configuration.IncludeErrorDetailPolicy
  = IncludeErrorDetailPolicy.Always;

A diferença na configuração é porque o CustomErros do web.config é algo que o ASP.Net usa para determinar se aquela tela de erro amarela deve ou não exibir os detalhes da exception. Já o Web API configura se os detalhes de HttpError serão serializados.

Apesar disso, algo que percebi é que eu não deveria estar tendo toda esta dor de cabeça, pois segundo o MSDN...
Use the default behavior for the host environment. For ASP.NET hosting, use the value from the customErrors element in the Web.config file. For self-hosting, use the value LocalOnly.
(
http://msdn.microsoft.com/en-us/library/system.web.http.includeerrordetailpolicy(v=vs.118).aspx)
... assim ainda tem alguma peça que não está encaixando. Mais tarde eu procuro saber o porquê.

Resultado final:

HTTP/1.1 500 Internal Server Error
Content-Length: 0
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/8.0
X-Powered-By: ASP.NET
Date: Thu, 15 Jan 2015 19:44:04 GMT

{
   "$type":"System.Web.Http.HttpError, System.Web.Http",
   "Message":"An error has occurred.",
   "ExceptionMessage":"...",
   "ExceptionType":"...",
   "StackTrace":"..."
}

Outras informações @ Per Request Error details policy in ASP.Net Web API.

Nenhum comentário: