コード例 #1
0
        public override void OnException(HttpActionExecutedContext context)
        {
            var type          = typeof(ResponseBody);
            var response      = new ResponseBody();
            var jsonFormatter = new JsonMediaTypeFormatter();
            HttpResponseMessage httpResponseMessage = new HttpResponseMessage();

            if (context.Exception is AccessException)
            {
                var ex = context.Exception as AccessException;
                response = new ErrorResponse(ServiceStatusCode.Unauthorized, null, ex.Message);
                var content = new ObjectContent(type, response, jsonFormatter);

                context.Response = new HttpResponseMessage()
                {
                    Content = content
                };

                return;
            }

            if (context.Exception is ModelValidationException)
            {
                var ex = context.Exception as ModelValidationException;
                response = new ErrorResponse(ServiceStatusCode.ValidationError, ex.ValidationResult, ex.Message);
                var content = new ObjectContent(type, response, jsonFormatter);

                context.Response = new HttpResponseMessage()
                {
                    Content = content
                };

                return;
            }

            if (context.Exception is KairosException)
            {
                var ex = context.Exception as KairosException;
                response = new ErrorResponse(ServiceStatusCode.PendException, null, ex.Message);
                var content = new ObjectContent(type, response, jsonFormatter);

                context.Response = new HttpResponseMessage()
                {
                    Content = content
                };

                return;
            }

            if (context.Exception is DbEntityValidationException)
            {
                var ex = context.Exception as DbEntityValidationException;
                response = new ErrorResponse(ServiceStatusCode.UnhandledException, ex.EntityValidationErrors, ExMessageHelper.GetInnerestErrorMessage(ex));

                httpResponseMessage.Content = new ObjectContent(type, response, jsonFormatter);
                context.Response            = httpResponseMessage;
                return;
            }

            if (context.Exception is DbUpdateException)
            {
                var ex = context.Exception as DbUpdateException;
                response = new ErrorResponse(ServiceStatusCode.UnhandledException, null, ExMessageHelper.GetInnerestErrorMessage(ex));

                httpResponseMessage.Content = new ObjectContent(type, response, jsonFormatter);
                context.Response            = httpResponseMessage;
                return;
            }

            var unhandledException = context.Exception;
            //var otherResponse = new ErrorResponse(ServiceStatusCode.UnhandledException, null, "Something error occurs.");
            var otherResponse = new ErrorResponse(ServiceStatusCode.UnhandledException, null, unhandledException.Message);
            var otherContent  = new ObjectContent(type, otherResponse, jsonFormatter);

            context.Response = new HttpResponseMessage()
            {
                Content = otherContent
            };
        }