protected virtual RestResponse Execute(RestRequest request, MethodType method) { request.Method = method; StringBuilder sb = new StringBuilder(); RestResponse response = new RestResponse { Request = request }; try { response = GetResponse(request, sb); } catch (WebException exception) { response.Status = ResponseStatus.Error; response.ErrorMessage = exception.Message; response.ErrorException = new RestException(exception.Message, response.StatusCode, response.ErrorException); sb.AppendLine(exception.Message); try { //if (exception.Status == WebExceptionStatus.ProtocolError) { if (exception.Response != null) { HttpWebResponse webResponse = (HttpWebResponse)exception.Response; response.ContentEncoding = webResponse.ContentEncoding; response.Server = webResponse.Server; response.ContentType = webResponse.ContentType; response.ContentLength = webResponse.ContentLength; using (Stream responseStream = webResponse.GetResponseStream()) { response.ContentArray = responseStream.ToArray(); } response.ResponseMode = GetResponseMode(response.ContentType); response.StatusCode = webResponse.StatusCode; response.StatusDescription = webResponse.StatusDescription; sb.AppendLine("HTTP/1.1 {0} {1}".FormatString(((int)webResponse.StatusCode), webResponse.StatusDescription)); response.ResponseUri = webResponse.ResponseUri; if (webResponse.Cookies != null) { foreach (Cookie cookie in webResponse.Cookies) { response.Cookies.Add(cookie); } } foreach (string headerName in webResponse.Headers.AllKeys) { string headerValue = webResponse.Headers[headerName]; response.Headers.Add(headerName, headerValue); sb.AppendLine("{0} : {1}".FormatString(headerName, headerValue)); } sb.AppendLine(); sb.AppendLine(response.Content); } } } catch (Exception ex) { response.Status = ResponseStatus.Error; response.ErrorMessage = ex.Message; response.ErrorException = new RestException(ex.Message, response.StatusCode, response.ErrorException); } } catch (Exception ex) { response.Status = ResponseStatus.Error; response.ErrorMessage = ex.Message; response.ErrorException = new RestException(ex.Message, response.StatusCode, response.ErrorException); } if (LogEnabled) { Logger.Info(sb.ToString(), RestConstants.RestComponent); } return(response); }
private RestResponse GetResponse(RestRequest request, StringBuilder sb) { WebRequest webRequest = request.Create(sb); RestResponse response = new RestResponse { Request = request }; request.ProgressChanged += (sender, e) => this.InvokeUploadProgressChanged(e); using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse()) { response.ContentEncoding = webResponse.ContentEncoding; response.Server = webResponse.Server; response.ContentType = webResponse.ContentType; response.ContentLength = webResponse.ContentLength; using (Stream responseStream = webResponse.GetResponseStream()) { byte[] buffer = new Byte[RestConstants.BufferSize]; using (MemoryStream ms = new MemoryStream()) { int bytesRead; long totalByteRead = 0; while (responseStream != null && (bytesRead = responseStream.Read(buffer, 0, buffer.Length)) != 0) { ms.Write(buffer, 0, bytesRead); ProgressChangedEventArgs progressChangedEventArgs = new ProgressChangedEventArgs(); progressChangedEventArgs.TotalBytesToReceive = response.ContentLength; totalByteRead += bytesRead; progressChangedEventArgs.BytesReceived = totalByteRead; this.InvokeDownloadProgressChanged(progressChangedEventArgs); Thread.Sleep(1); } response.ContentArray = ms.ToArray(); } } response.ResponseMode = GetResponseMode(response.ContentType); response.StatusCode = webResponse.StatusCode; response.StatusDescription = webResponse.StatusDescription; sb.AppendLine("HTTP/1.1 {0} {1}".FormatString(((int)webResponse.StatusCode), webResponse.StatusDescription)); response.ResponseUri = webResponse.ResponseUri; response.Status = ResponseStatus.Completed; if (webResponse.Cookies != null) { foreach (Cookie cookie in webResponse.Cookies) { response.Cookies.Add(cookie); } } foreach (string headerName in webResponse.Headers.AllKeys) { string headerValue = webResponse.Headers[headerName]; response.Headers.Add(headerName, headerValue); sb.AppendLine("{0} : {1}".FormatString(headerName, headerValue)); } sb.AppendLine(); } sb.AppendLine(response.Content); return(response); }
private async Task <RestResponse> GetResponseAsync(RestRequest request) { RestResponse response = new RestResponse { Request = request }; request.ProgressChanged += (sender, e) => this.InvokeUploadProgressChanged(e); StringBuilder sb = new StringBuilder(); try { var webRequest = await request.CreateAsync(sb); HttpWebResponse webResponse = (HttpWebResponse)(await webRequest.GetResponseAsync()); using (Stream responseStream = webResponse.GetResponseStream()) { byte[] buffer = new Byte[RestConstants.BufferSize]; using (MemoryStream ms = new MemoryStream()) { int bytesRead; long totalByteRead = 0; while (responseStream != null && (bytesRead = responseStream.Read(buffer, 0, buffer.Length)) != 0) { await ms.WriteAsync(buffer, 0, bytesRead); ProgressChangedEventArgs progressChangedEventArgs = new ProgressChangedEventArgs(); totalByteRead += bytesRead; progressChangedEventArgs.BytesReceived = totalByteRead; this.InvokeDownloadProgressChanged(progressChangedEventArgs); } response.ContentArray = ms.ToArray(); } } response.ResponseMode = GetResponseMode(response.ContentType); response.StatusCode = webResponse.StatusCode; sb.AppendLine("HTTP/1.1 {0} {1}".FormatString(((int)webResponse.StatusCode), webResponse.StatusDescription)); response.StatusDescription = webResponse.StatusDescription; response.ResponseUri = webResponse.ResponseUri; response.Status = ResponseStatus.Completed; if (webResponse.Cookies != null) { foreach (Cookie cookie in webResponse.Cookies) { response.Cookies.Add(cookie); } } foreach (string headerName in webResponse.Headers.AllKeys) { string headerValue = webResponse.Headers[headerName]; response.Headers[headerName] = headerValue; sb.AppendLine("{0} : {1}".FormatString(headerName, headerValue)); } response.ContentType = webResponse.ContentType; response.ContentLength = webResponse.ContentLength; response.StatusCode = webResponse.StatusCode; response.ResponseMode = GetResponseMode(response.ContentType); response.StatusDescription = webResponse.StatusDescription; response.ResponseUri = webResponse.ResponseUri; response.Status = ResponseStatus.Completed; sb.AppendLine(response.Content); } catch (WebException exception) { response.Status = ResponseStatus.Error; response.ErrorMessage = exception.Message; response.ErrorException = new RestException(exception.Message, response.StatusCode, response.ErrorException); sb.AppendLine(exception.Message); try { if (exception.Response != null) { HttpWebResponse webResponse = (HttpWebResponse)exception.Response; response.ContentType = webResponse.ContentType; response.ContentLength = webResponse.ContentLength; using (Stream responseStream = webResponse.GetResponseStream()) { response.ContentArray = responseStream.ToArray(); } response.ResponseMode = GetResponseMode(response.ContentType); response.StatusCode = webResponse.StatusCode; response.StatusDescription = webResponse.StatusDescription; sb.AppendLine("HTTP/1.1 {0} {1}".FormatString(((int)webResponse.StatusCode), webResponse.StatusDescription)); response.ResponseUri = webResponse.ResponseUri; if (webResponse.Cookies != null) { foreach (Cookie cookie in webResponse.Cookies) { response.Cookies.Add(cookie); } } foreach (string headerName in webResponse.Headers.AllKeys) { string headerValue = webResponse.Headers[headerName]; response.Headers[headerName] = headerValue; sb.AppendLine("{0} : {1}".FormatString(headerName, headerValue)); } sb.AppendLine(); sb.AppendLine(response.Content); } } catch (Exception ex) { response.Status = ResponseStatus.Error; response.ErrorMessage = ex.Message; response.ErrorException = new RestException(ex.Message, response.StatusCode, response.ErrorException); } } catch (Exception ex) { response.Status = ResponseStatus.Error; response.ErrorMessage = ex.Message; response.ErrorException = new RestException(ex.Message, response.StatusCode, response.ErrorException); } if (LogEnabled) { Logger.Info(sb.ToString(), RestConstants.RestComponent); } return(response); }