private static JObject SerializeErrorResponse(StoreAndForwardError errorResponse)
 {
     return(JObject.FromObject(errorResponse, new JsonSerializer
     {
         NullValueHandling = NullValueHandling.Ignore,
         Formatting = Formatting.Indented
     }));
 }
        /// <summary>
        /// Handle errors.
        /// </summary>
        /// <param name="exceptionHandlerContext"></param>
        public override void Handle(ExceptionHandlerContext exceptionHandlerContext)
        {
            Exception exception = exceptionHandlerContext.Exception;

            // Generate a unique ID for each error
            string id = Guid.NewGuid().ToString();

            var storeAndForwardError = new StoreAndForwardError
            {
                Id         = id,
                Message    = exception.Message,
                StackTrace = exception.StackTrace,
                DateTime   = DateTime.UtcNow,
                ErrorCode  = null
            };

            // Log the error
            Log.Error(exception, "Error details {@errorDetails}", storeAndForwardError);

            // Return a generic server error
            exceptionHandlerContext.Result = new ResponseMessageResult(
                exceptionHandlerContext.Request.CreateResponse <JObject>(HttpStatusCode.InternalServerError,
                                                                         SerializeErrorResponse(storeAndForwardError)));
        }