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))); }
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; })); }