Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }