private GetCachedResponse ( |
||
httpJsonRequest | ||
additionalHeaders | ||
Результат | RavenJToken |
/// <summary> /// Begins the read response string. /// </summary> public async Task <RavenJToken> ReadResponseJsonAsync() { if (SkipServerCheck) { var cachedResult = factory.GetCachedResponse(this); factory.InvokeLogRequest(owner, () => new RequestResultArgs { DurationMilliseconds = CalculateDuration(), Method = Method, HttpResult = (int)ResponseStatusCode, Status = RequestStatus.AggressivelyCached, Result = cachedResult.ToString(), Url = Url, PostedData = postedData }); return(cachedResult); } if (writeCalled) { return(await ReadJsonInternalAsync().ConfigureAwait(false)); } var result = await SendRequestInternal(() => new HttpRequestMessage(new HttpMethod(Method), Url)).ConfigureAwait(false); if (result != null) { return(result); } return(await ReadJsonInternalAsync().ConfigureAwait(false)); }
/// <summary> /// Begins the read response string. /// </summary> public Task <RavenJToken> ReadResponseJsonAsync() { if (SkipServerCheck) { var tcs = new TaskCompletionSource <RavenJToken>(); var cachedResponse = factory.GetCachedResponse(this); factory.InvokeLogRequest(owner, () => new RequestResultArgs { DurationMilliseconds = CalculateDuration(), Method = webRequest.Method, HttpResult = (int)ResponseStatusCode, Status = RequestStatus.AggressivelyCached, Result = cachedResponse.ToString(), Url = webRequest.RequestUri.PathAndQuery, PostedData = postedData }); tcs.SetResult(cachedResponse); return(tcs.Task); } return(InternalReadResponseStringAsync(retries: 0)); }
private string ReadStringInternal(Func <WebResponse> getResponse) { WebResponse response; try { response = getResponse(); } catch (WebException e) { var httpWebResponse = e.Response as HttpWebResponse; if (httpWebResponse == null || httpWebResponse.StatusCode == HttpStatusCode.NotFound || httpWebResponse.StatusCode == HttpStatusCode.Conflict) { throw; } if (httpWebResponse.StatusCode == HttpStatusCode.NotModified && CachedRequestDetails != null) { return(factory.GetCachedResponse(this)); } using (var sr = new StreamReader(e.Response.GetResponseStreamWithHttpDecompression())) { throw new InvalidOperationException(sr.ReadToEnd(), e); } } ResponseHeaders = response.Headers; ResponseStatusCode = ((HttpWebResponse)response).StatusCode; using (var responseStream = response.GetResponseStreamWithHttpDecompression()) { var reader = new StreamReader(responseStream); var text = reader.ReadToEnd(); reader.Close(); factory.CacheResponse(response, text, this); return(text); } }
/// <summary> /// Begins the read response string. /// </summary> public async Task <RavenJToken> ReadResponseJsonAsync() { if (SkipServerCheck) { var result = factory.GetCachedResponse(this); factory.InvokeLogRequest(owner, () => new RequestResultArgs { DurationMilliseconds = CalculateDuration(), Method = webRequest.Method, HttpResult = (int)ResponseStatusCode, Status = RequestStatus.AggressivelyCached, Result = result.ToString(), Url = webRequest.RequestUri.PathAndQuery, PostedData = postedData }); return(result); } int retries = 0; while (true) { WebException webException; HttpWebResponse httpWebResponse; try { if (writeCalled == false) { webRequest.ContentLength = 0; } return(await ReadJsonInternalAsync(webRequest.GetResponseAsync())); } catch (WebException e) { if (++retries >= 3 || disabledAuthRetries) { throw; } httpWebResponse = e.Response as HttpWebResponse; if (httpWebResponse == null || (httpWebResponse.StatusCode != HttpStatusCode.Unauthorized && httpWebResponse.StatusCode != HttpStatusCode.Forbidden && httpWebResponse.StatusCode != HttpStatusCode.PreconditionFailed)) { throw; } webException = e; } if (httpWebResponse.StatusCode == HttpStatusCode.Forbidden) { await HandleForbiddenResponseAsync(httpWebResponse); await new CompletedTask(webException).Task; // Throws, preserving original stack } if (await HandleUnauthorizedResponseAsync(httpWebResponse) == false) { await new CompletedTask(webException).Task; // Throws, preserving original stack } } }