private static async Task WriteResponseErrorsAsync(
            HttpContext context,
            ApiErrorDetails errorDetails)
        {
            context.Response.StatusCode = (int)errorDetails.StatusCode;

            var json = JsonConvert.SerializeObject(errorDetails);

            await context
            .Response
            .WriteAsync(json);
        }
        public override Task OnAuthorizationAsync(HttpActionContext actionContext, System.Threading.CancellationToken cancellationToken)
        {
            ApiErrorDetails apierrordetails = new ApiErrorDetails();

            try
            {
                var validatedToken = IsBearertokenValid(actionContext);
                if (validatedToken != null)
                {
                    return(Task.FromResult <object>(null));
                }
            }
            catch (Exception ex)
            {
                //var userClaims = HttpContext.Current.GetOwinContext().Authentication.User.Claims;
                Stream requestBodyStream = actionContext.Request.Content.ReadAsStreamAsync().Result;
                requestBodyStream.Position = 0;
                string requestBody = string.Empty;
                using (StreamReader sr = new StreamReader(requestBodyStream))
                {
                    requestBody = sr.ReadToEnd();
                }

                apierrordetails.ExceptionMessage = "Unable to " + actionContext.Request.Method.ToString() +
                                                   " data to API service at URL:" + actionContext.Request.RequestUri.ToString() +
                                                   " Server returned an Unauthorized.";
                apierrordetails.CorrelationId = actionContext.Request.Headers.Contains("CorrelationId")
                    ? Convert.ToInt64(actionContext.Request.Headers.GetValues("CorrelationId").FirstOrDefault())
                    : Convert.ToInt64(TraceHelper.GetCorrelationId());
                apierrordetails.ExceptionCode = 401;
                apierrordetails.RequestBody   = requestBody;
                apierrordetails.RequestMethod = actionContext.Request.Method.ToString();
                apierrordetails.RequestURL    = actionContext.Request.RequestUri.ToString();
                apierrordetails.Message       = ex.Message;
                actionContext.Response        = new HttpResponseMessage(HttpStatusCode.Forbidden)
                {
                    Content = new ObjectContent(typeof(ApiErrorDetails),
                                                apierrordetails,
                                                GlobalConfiguration.Configuration.Formatters.JsonFormatter)
                };
                return(Task.FromResult <object>(actionContext));
            }

            return(Task.FromResult <object>(null));
        }