public override void OnException(HttpActionExecutedContext context)
        {
            if (null == context.Exception)
            {
                return;
            }

            var httpResultException = context.Exception as HttpResponseException;

            if (null == httpResultException)
            {
                var exceptionId = UidTool.Next();
                context.Response = context.Request.CreateResponse(HttpStatusCode.InternalServerError, new
                {
                    Message = context.Exception.Message,
                    Details = "See log entry identified by token {0}".Fill(exceptionId),
                    Code    = 500,
                });
                _logger.Error("WEBAPI 500, token: {0}".Fill(exceptionId), context.Exception);
            }
            else
            {
                _logger.Error("Unhandled http exception", context.Exception);
            }
        }
        protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var content = await request.Content.ReadAsStringAsync();

            var requestId = UidTool.GetTicksHex();

            _logger.Debug("[{0}] {1} {2} {3}\r\n{4}",
                          requestId,
                          GetClientIp(request),
                          request.Method,
                          request.RequestUri,
                          content);


            return(await base.SendAsync(request, cancellationToken));
        }