public void HandleExecutedContext(HttpActionExecutedContext ctx)
        {
            ApiResult resp;
            //如果有模型校验错误就返回
            if (!ctx.ActionContext.ModelState.IsValid && this.HandleModelStateValidationError(ctx.ActionContext.ModelState, out resp))
            {
                ctx.Response = ctx.Request.CreateResponse(HttpStatusCode.OK, (ApiResult)(IApiResult)resp);
                return;
            }

            AssociateFilter.InvokeBaseOnActionExecuted(ctx);
            if (ctx.Exception != null && this.HandleException(ctx.Exception, out resp))
            {
                ctx.Response = ctx.Request.CreateResponse(HttpStatusCode.OK, (ApiResult)(IApiResult)resp);
            }
            else
            {
                if (ctx.Response.StatusCode == HttpStatusCode.Unauthorized && this.HandleUnauthorizedRequest(ctx.ActionContext, out resp))
                {
                    return;
                }
                else if (ctx.Response.StatusCode != HttpStatusCode.OK && ctx.Response.StatusCode != HttpStatusCode.NoContent)
                {
                    var result = new ApiResult((int)ctx.Response.StatusCode, ctx.Response.StatusCode.ToString());
                    ctx.Response = ctx.Request.CreateResponse(HttpStatusCode.OK, result);
                }
                else
                {
                    var cnt = ctx.ActionContext.Response.Content;
                    if (cnt != null)
                    {
                        var objCnt = (ObjectContent)cnt;
                        if (typeof(IPagedList).IsAssignableFrom(objCnt.ObjectType))
                        {
                            var x = ((IPagedList)objCnt.Value).AsApiResponse();
                            var result = new ApiResultWithPagedDataList<object>();
                            result.hasMore = x.hasMore;
                            result.data = x.data;
                            ctx.Response = ctx.Request.CreateResponse(HttpStatusCode.OK, result);
                        }
                        else if (objCnt.ObjectType.Equals(typeof(ApiResult)))
                        {
                            ctx.Response = ctx.Request.CreateResponse(HttpStatusCode.OK, objCnt);
                        }
                        else
                        {
                            var result = new ApiResultWithData()
                            {
                                data = ctx.ActionContext.Response.Content.ReadAsAsync<object>().Result
                            };
                            ctx.Response = ctx.Request.CreateResponse(HttpStatusCode.OK, result);
                        }

                    }
                    else
                    {
                        ctx.Response = ctx.Request.CreateResponse(HttpStatusCode.OK, new ApiResult());
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public void HandleExecutedContext(HttpActionExecutedContext ctx)
        {
            ApiResult resp;

            //如果有模型校验错误就返回
            if (!ctx.ActionContext.ModelState.IsValid && this.HandleModelStateValidationError(ctx.ActionContext.ModelState, out resp))
            {
                ctx.Response = ctx.Request.CreateResponse(HttpStatusCode.OK, (ApiResult)(IApiResult)resp);
                return;
            }

            AssociateFilter.InvokeBaseOnActionExecuted(ctx);
            if (ctx.Exception != null && this.HandleException(ctx.Exception, out resp))
            {
                ctx.Response = ctx.Request.CreateResponse(HttpStatusCode.OK, (ApiResult)(IApiResult)resp);
            }
            else
            {
                if (ctx.Response.StatusCode == HttpStatusCode.Unauthorized && this.HandleUnauthorizedRequest(ctx.ActionContext, out resp))
                {
                    return;
                }
                else if (ctx.Response.StatusCode != HttpStatusCode.OK && ctx.Response.StatusCode != HttpStatusCode.NoContent)
                {
                    var result = new ApiResult((int)ctx.Response.StatusCode, ctx.Response.StatusCode.ToString());
                    ctx.Response = ctx.Request.CreateResponse(HttpStatusCode.OK, result);
                }
                else
                {
                    var cnt = ctx.ActionContext.Response.Content;
                    if (cnt != null)
                    {
                        var objCnt = (ObjectContent)cnt;
                        if (typeof(IPagedList).IsAssignableFrom(objCnt.ObjectType))
                        {
                            var x      = ((IPagedList)objCnt.Value).AsApiResponse();
                            var result = new ApiResultWithPagedDataList <object>();
                            result.hasMore = x.hasMore;
                            result.data    = x.data;
                            ctx.Response   = ctx.Request.CreateResponse(HttpStatusCode.OK, result);
                        }
                        else if (objCnt.ObjectType.Equals(typeof(ApiResult)))
                        {
                            ctx.Response = ctx.Request.CreateResponse(HttpStatusCode.OK, objCnt);
                        }
                        else
                        {
                            var result = new ApiResultWithData()
                            {
                                data = ctx.ActionContext.Response.Content.ReadAsAsync <object>().Result
                            };
                            ctx.Response = ctx.Request.CreateResponse(HttpStatusCode.OK, result);
                        }
                    }
                    else
                    {
                        ctx.Response = ctx.Request.CreateResponse(HttpStatusCode.OK, new ApiResult());
                    }
                }
            }
        }