コード例 #1
0
        public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext context)
        {
            var modelState = context.ModelState;
            if (modelState.IsValid)
            {
                base.OnActionExecuting(context);
            }
            else
            {
                // build a json string
                int i = 0;
                StringBuilder sbErrors = new StringBuilder("{");
                foreach (KeyValuePair<string, ModelState> keyValue in modelState)
                {
                    string fieldName = keyValue.Key;
                    string[] values = keyValue.Value.Errors.Select(e => e.ErrorMessage).ToArray<string>();
                    if (values.Length == 0 || String.IsNullOrWhiteSpace(values[0]))
                    {
                        continue;
                    }
                    int postion = fieldName.IndexOf(".");
                    if (postion > -1)
                    {
                        fieldName = fieldName.Substring(postion + 1, fieldName.Length - postion - 1);
                    }

                    // key is property name and value is the error message,
                    // e.g:{"key1":"[\"v1\",\"v2\"]","key2":"[\"v1\",\"v2\"]"}
                    if (i > 0) sbErrors.Append(",");
                    sbErrors.Append("\"");
                    sbErrors.Append(fieldName);
                    sbErrors.Append("\":");
                    sbErrors.Append("[");

                    if (values != null && values.Length > 0)
                    {
                        for (int j = 0; j < values.Length; j++)
                        {
                            if (j > 0) sbErrors.Append(",");

                            sbErrors.Append("\"").Append(values[j]).Append("\"");
                        }
                    }

                    sbErrors.Append("]");

                    i++;
                }
                sbErrors.Append("}");
                string message = "invalid request data.";
                context.Response = new HttpResponseMessage(HttpStatusCode.BadRequest);

                var error = new WSErrorResponse(HttpStatusCode.BadRequest, Errors.data_validation_error_400,message, sbErrors.ToString());

                context.Response = HttpResponseHelper.BuildErrorResponse(error);
            }
        }
コード例 #2
0
        public static HttpResponseMessage BuildErrorResponse(WSErrorResponse response)
        {
            var responseMessage = new HttpResponseMessage(ConvertToStatusCode(response.Status));

            responseMessage.Content = new ObjectContent(typeof(WSErrorResponse), response, new JsonMediaTypeFormatter());

            responseMessage.Headers.Add(ResponseHeaderConstants.X_Error_Message, RemoveInvalidNewLine(response.Message));
            return responseMessage;
        }
コード例 #3
0
        public static Task<HttpResponseMessage> SendAsync(WSErrorResponse response)
        {
            return Task<HttpResponseMessage>.Factory.StartNew(() =>
            {
                var responseMessage = new HttpResponseMessage(ConvertToStatusCode(response.Status));

                responseMessage.Content = new ObjectContent(typeof(WSErrorResponse), response, new JsonMediaTypeFormatter());

                responseMessage.Headers.Add(ResponseHeaderConstants.X_Error_Message, RemoveInvalidNewLine(response.Message));
                return responseMessage;
            });
        }
コード例 #4
0
        private WSErrorResponse UnAuthenticationResponse()
        {
            WSErrorResponse unauth = new WSErrorResponse
            {
                Code = Errors.invalid_token_401,
                Message = "未经授权的访问!",
                Status = 401
            };

            return unauth;
        }
コード例 #5
0
        public override void OnException(HttpActionExecutedContext context)
        {
            WSErrorResponse error = new WSErrorResponse
            {
                Message = context.Exception == null? null : context.Exception.Message,
                More = context.Exception == null? null : context.Exception.ToString()
            };

            if (context.Exception is BadRequestException)
            {
                error.Status = (int)HttpStatusCode.BadRequest;

                if (String.IsNullOrWhiteSpace(error.Code))
                {
                    error.Code = Errors.bad_request_400;
                }
            }
            else if (context.Exception is DuplicateObjectException)
            {
                error.Status = (int)HttpStatusCode.BadRequest;
                if (String.IsNullOrWhiteSpace(error.Code))
                {
                    error.Code = Errors.record_has_existed_400;
                }
            }
            else if (context.Exception is UnauthorizedException)
            {
                error.Status = (int)HttpStatusCode.Unauthorized;
                if (String.IsNullOrWhiteSpace(error.Code))
                {
                    error.Code = Errors.unauthorized_401;
                }
            }
            else if (context.Exception is ForbiddenException)
            {
                error.Status = (int)HttpStatusCode.Forbidden;
                if (String.IsNullOrWhiteSpace(error.Code))
                {
                    error.Code = Errors.forbidden_403;
                }
            }
            else if (context.Exception is NotFoundException)
            {
                error.Status = (int)HttpStatusCode.NotFound;
                {
                    error.Code = Errors.not_found_404;
                }
            }
            else if (context.Exception is MobileException)
            {
                error.Status = (int)HttpStatusCode.InternalServerError;

                /*
                 * This is a temporary solution.
                 * There is a kind of error, says EMSE Script error, which does not impact the process.
                 * The JSON response should indicate it via the code field.
                //*/
                var exception = context.Exception as MobileException;
                if (exception != null)
                {
                    error.Code = exception.ErrorCode;
                }

                if (String.IsNullOrWhiteSpace(error.Code))
                {
                    error.Code = Errors.internal_server_error_500;
                }
            }
            else
            {
                error.Status = (int)HttpStatusCode.InternalServerError;
                error.Code = Errors.internal_server_error_500;
            }

            context.Response = HttpResponseHelper.BuildErrorResponse(error);
        }