コード例 #1
0
        protected override Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            Func <Task <HttpResponseMessage>, HttpResponseMessage> continuationFunction = null;

            if ((request.Headers.TransferEncodingChunked == true) && (request.Content.Headers.ContentLength == 0L))
            {
                request.Content.Headers.ContentLength = null;
            }
            RequestInfo property = request.GetProperty <RequestInfo>("");

            if (property == null)
            {
                property = RequestHelper.BuildRequestInfo(request);
                request.AddProperty <RequestInfo>(property, "");
            }
            if (property.HttpMethod != HttpMethod.Options)
            {
                foreach (IApiRequestFilter filter in this.filterList)
                {
                    HttpResponseMessage result = null;
                    try
                    {
                        result = filter.DoFilter(request, property);
                    }
                    catch (Exception exception)
                    {
                        result = request.CreateErrorResponse(HttpStatusCode.InternalServerError, "请求筛选错误", exception);
                    }
                    if (result != null)
                    {
                        TaskCompletionSource <HttpResponseMessage> source = new TaskCompletionSource <HttpResponseMessage>();
                        source.SetResult(result);
                        if (continuationFunction == null)
                        {
                            continuationFunction = task => this.SendCompletion(request, task.Result);
                        }
                        return(source.Task.ContinueWith <HttpResponseMessage>(continuationFunction));
                    }
                }
            }
            return(base.SendAsync(request, cancellationToken).ContinueWith <HttpResponseMessage>(task => this.SendCompletion(request, task.Result)));
        }
コード例 #2
0
        protected override Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            RequestInfo requestInfo = request.GetProperty <RequestInfo>("");

            if (requestInfo == null)
            {
                requestInfo = RequestHelper.BuildRequestInfo(request);
                request.AddProperty <RequestInfo>(requestInfo, "");
            }
            return(base.SendAsync(request, cancellationToken).ContinueWith <HttpResponseMessage>(delegate(Task <HttpResponseMessage> task)
            {
                object obj2;
                InterfaceSetting property = request.GetProperty <InterfaceSetting>("");
                if ((requestInfo.HttpMethod == HttpMethod.Options) || ((property != null) && property.DisableLog))
                {
                    return task.Result;
                }
                RequestLog log = RequestHelper.BuildRequestLog(request, requestInfo);
                HttpResponseMessage message = task.Result;
                string str = string.Empty;
                ObjectContent content = message.Content as ObjectContent;
                if (content != null)
                {
                    QiuxunLogResult result = content.Value as QiuxunLogResult;
                    if (result != null)
                    {
                        log.ApiStatus = result.LogCode;
                        log.ApiDesc = result.LogDesc;
                        log.ApiDescDetail = result.LogDescDetail;
                    }
                    else
                    {
                        ApiResult result2 = content.Value as ApiResult;
                        if (result2 != null)
                        {
                            log.ApiStatus = result2.Code;
                            log.ApiDesc = result2.Desc;
                            if (((property != null) && property.IsRecordResponseData) && (result2.Code == 100))
                            {
                                str = result2.ToJsonString();
                            }
                        }
                    }
                }
                if (request.Properties.TryGetValue("eprepare-set-cookie", out obj2))
                {
                    IEnumerable <CookieHeaderValue> enumerable = (IEnumerable <CookieHeaderValue>)obj2;
                    foreach (CookieHeaderValue value2 in enumerable)
                    {
                        log.ResponseCookie = log.ResponseCookie + string.Format("{0}~", value2.ToString());
                    }
                    if (log.ResponseCookie.Length > 0)
                    {
                        log.ResponseCookie = log.ResponseCookie.TrimEnd(new char[] { '~' });
                    }
                }
                log.HttpStatus = (int)message.StatusCode;
                if (this.allWebRequest)
                {
                    RequestHelper.WriteAllWebRequestLog(log);
                    return message;
                }
                if (((property != null) && property.IsRecordResponseData) && !string.IsNullOrEmpty(str))
                {
                    RequestHelper.WriteWebRequestLog(log, str);
                    return message;
                }
                RequestHelper.WriteWebRequestLog(log, str);
                return message;
            }));
        }