Exemplo n.º 1
0
        /// <summary>
        /// 重写当API接口发生异常时
        /// </summary>
        /// <param name="actionExecutedContext"></param>
        public override void OnException(HttpActionExecutedContext actionExecutedContext)
        {
            HttpError error = new HttpError();

            if (actionExecutedContext.Exception is ValiDataException)
            {
                //数据验证错误
                error.Message       = HttpStatusCode.Forbidden.GetHashCode().ToString();
                error.MessageDetail = actionExecutedContext.Exception.Message;
                throw new HttpResponseException(
                          actionExecutedContext.Request.CreateErrorResponse(HttpStatusCode.OK, error));
            }
            else if (actionExecutedContext.Exception is RequestIsNullException)
            {
                //提交的请求参数为空
                error.Message       = HttpStatusCode.BadRequest.GetHashCode().ToString();
                error.MessageDetail = "提交的参数为空,请检查";
                throw new HttpResponseException(
                          actionExecutedContext.Request.CreateErrorResponse(HttpStatusCode.OK, error));
            }
            else if (actionExecutedContext.Exception is DataNotFundException)
            {
                //未能通过指定的条件找到对应数据 例如通过ID找对应的信息
                error.Message       = HttpStatusCode.NotFound.GetHashCode().ToString();
                error.MessageDetail = actionExecutedContext.Exception.Message;
                throw new HttpResponseException(
                          actionExecutedContext.Request.CreateErrorResponse(HttpStatusCode.OK, error));
            }
            else if (actionExecutedContext.Exception is NotImplementedException)
            {
                //调用了未实现的方法
                error.Message       = HttpStatusCode.NotImplemented.GetHashCode().ToString();
                error.MessageDetail = actionExecutedContext.Exception.Message;
                throw new HttpResponseException(
                          actionExecutedContext.Request.CreateErrorResponse(HttpStatusCode.OK, error));
            }
            else if (actionExecutedContext.Exception is TimeoutException)
            {
                //已超时
                error.Message       = HttpStatusCode.GatewayTimeout.GetHashCode().ToString();
                error.MessageDetail = "服务器已超时";
                try
                {
                    ExceptionLog.create(HttpStatusCode.GatewayTimeout, "服务器超时", actionExecutedContext.Exception.StackTrace);
                }
                catch { }
                throw new HttpResponseException(
                          actionExecutedContext.Request.CreateErrorResponse(HttpStatusCode.OK, error));
            }
            else
            {
                //其他都归结于 500 服务器错误
                error.Message       = HttpStatusCode.InternalServerError.GetHashCode().ToString();
                error.MessageDetail = actionExecutedContext.Exception.Message;
                try
                {
                    ExceptionLog.create(HttpStatusCode.InternalServerError, error.MessageDetail, actionExecutedContext.Exception.StackTrace);
                }
                catch { }
                throw new HttpResponseException(
                          actionExecutedContext.Request.CreateErrorResponse(HttpStatusCode.OK, error));
            }
            //base.OnException(actionExecutedContext);
        }