public static PageReadResult FromWebClientException(WebClientException ex, Uri requestUri) { PageErrorType pageError = PageErrorType.SiteError; string errorText = string.Empty; int statusCode = ex?.Response?.StatusCode ?? 0; if (statusCode != 0) { switch (statusCode) { case 408: errorText = "Timeout"; pageError = PageErrorType.Timeout; break; default: errorText = "Site Error"; pageError = PageErrorType.SiteError; break; } } string message = $"{errorText} getting page {requestUri}."; Logger?.Debug(message); // No need for a stacktrace if it's one of these errors. if (!(pageError == PageErrorType.Timeout || statusCode == 500)) { Logger?.Debug($"{ex.Message}\n{ex.StackTrace}"); } return(new PageReadResult(requestUri, null, new FeedReaderException(message, ex, FeedReaderFailureCode.PageFailed), pageError)); }
private MockDownloadJob GetJob_FailedDownload_NetFailed(string songHash, string songDir) { Exception downloadException = new WebClientException("404: Not Found"); DownloadResult downloadResult = new DownloadResult(@"C:\Test", DownloadResultStatus.NetFailed, 404, "404: Not Found", downloadException); ZipExtractResult zipResult = null; var finalResult = new JobResult() { SongHash = songHash, DownloadResult = downloadResult, ZipResult = zipResult, SongDirectory = songDir }; var job = new MockDownloadJob(songHash, finalResult); return(job); }
private async Task <string> SendHttpRequestAsync(ISerializationContextProvider serializationContextProvider, string uri, string httpMethod, object requestBodyEntity, TypeSpec requestBodyBaseType, RequestOptions options) { byte[] requestBytes = null; HttpResponseMessage response = null; if (requestBodyEntity != null) { requestBytes = this.serializerFactory .GetSerializer(serializationContextProvider) .SerializeToBytes(requestBodyEntity, new SerializeOptions { ExpectedBaseType = requestBodyBaseType }); } var request = new HttpRequestMessage(new System.Net.Http.HttpMethod(httpMethod), uri); string responseString = null; Exception thrownException = null; try { if (options != null) { options.ApplyRequestModifications(request); } AddDefaultHeaders(request); const string jsonContentType = "application/json; charset=utf-8"; request.Headers.Add("Accept", jsonContentType); if (requestBytes != null) { var requestContent = new ByteArrayContent(requestBytes); requestContent.Headers.ContentType = MediaTypeHeaderValue.Parse(jsonContentType); request.Content = requestContent; } using (Profiler.Step("client: " + request.Method + " " + request.RequestUri)) { response = await WebClient.SendAsync(request, CancellationToken.None); } if (response.Content != null) { responseString = await response.Content.ReadAsStringAsync(); if (responseString.Length == 0) { responseString = null; } } if ((int)response.StatusCode >= 400) { var gotJsonResponseBody = responseString != null && response.Content.Headers.ContentType.MediaType == "application/json"; var responseObject = gotJsonResponseBody ? Deserialize(responseString, null, serializationContextProvider) : null; throw WebClientException.Create(this.typeMapper, request, response, responseObject, null); } } catch (Exception ex) { thrownException = ex; throw; } finally { var eh = RequestCompleted; if (eh != null) { // Since request content has been disposed at this point we recreate it.. if (request.Content != null) { var nonDisposedContent = new ByteArrayContent(requestBytes); nonDisposedContent.Headers.CopyHeadersFrom(request.Content.Headers); request.Content = nonDisposedContent; } eh(this, new ClientRequestLogEventArgs(request, response, thrownException)); } } return(responseString); }