private static HttpRequestMessage DecodeHeaders(HttpContent httpContent, StreamReader streamReader)
        {
            var request = new HttpRequestMessage();

            var firstLine = streamReader.ReadLine();
            var split     = firstLine.Split(new[] { ' ' }, 2);

            request.Method     = new HttpMethod(split[0]);
            request.RequestUri = new Uri(split[1], UriKind.RelativeOrAbsolute);

            var headers = new HeaderDictionary();

            DecodeHeaders(headers, streamReader);

            foreach (var header in headers)
            {
                if (HeadersHelper.IsContentHeader(header.Key))
                {
                    httpContent.Headers.Add(header.Key, header.Value.ToList());
                }
                else
                {
                    request.Headers.Add(header.Key, header.Value.ToList());
                }
            }

            request.Content = httpContent;

            return(request);
        }
Beispiel #2
0
        public static HttpRequestMessage ToHttpRequestMessage(this HttpRequest httpRequest, string path)
        {
            var requestMessage =
                new HttpRequestMessage(new HttpMethod(httpRequest.Method),
                                       new Uri(DummyBaseUri, path + httpRequest.QueryString))
            {
                Content = new RawStreamContent(httpRequest.Body)
            };

            foreach (var header in httpRequest.Headers)
            {
                if (header.Key.Equals(HeaderNames.Authorization, StringComparison.OrdinalIgnoreCase))
                {
                    continue;
                }

                if (HeadersHelper.IsContentHeader(header.Key))
                {
                    requestMessage.Content.Headers.Add(header.Key, (IEnumerable <string>)header.Value);
                }
                else
                {
                    requestMessage.Headers.Add(header.Key, (IEnumerable <string>)header.Value);
                }
            }

            return(requestMessage);
        }
Beispiel #3
0
        private static (HttpResponseMessage, IHeaderDictionary) DecodeResponse(TextReader textReader)
        {
            var response       = new HttpResponseMessage();
            var contentHeaders = new HeaderDictionary();

            var line       = textReader.ReadLine();
            var statusCode = int.Parse(line);

            response.StatusCode = (HttpStatusCode)statusCode;

            var headers = new HeaderDictionary();

            DecodeHeaders(headers, textReader);
            foreach (var header in headers)
            {
                if (HeadersHelper.IsContentHeader(header.Key))
                {
                    contentHeaders.Add(header);
                }
                else
                {
                    response.Headers.Add(header.Key, (string[])header.Value);
                }
            }

            return(response, contentHeaders);
        }
Beispiel #4
0
 public static void CopyHeadersTo(this IHeaderDictionary headerDictionary, HttpHeaders httpHeaders,
                                  HttpContentHeaders contentHeaders)
 {
     foreach (var requestHeader in headerDictionary)
     {
         if (HeadersHelper.IsContentHeader(requestHeader.Key))
         {
             contentHeaders.Add(requestHeader.Key, (IEnumerable <string>)requestHeader.Value);
         }
         else
         {
             httpHeaders.Add(requestHeader.Key, (IEnumerable <string>)requestHeader.Value);
         }
     }
 }
        public static async Task <HttpResponseMessage> DeserializeResponse(this Stream stream)
        {
            var response = new HttpResponseMessage();
            var headers  = new HeaderDictionary();

            using (var streamReader = new StreamReader(stream, Encoding.UTF8, false, 8192, true))
            {
                var statusLine = await streamReader.ReadLineAsync();

                response.SetStatusProperties(statusLine);

                string line;
                while (!string.IsNullOrEmpty(line = await streamReader.ReadLineAsync()))
                {
                    var split = line.Split(new[] { ": " }, 2, StringSplitOptions.None);
                    headers.Add(split[0], split[1]);
                }
            }

            var contentLength = headers.ContentLength;

            if (contentLength > 0)
            {
                var buffer = await stream.ReadBytes((int)contentLength.Value);

                response.Content = new ByteArrayPoolContent(buffer.Array, 0, buffer.Count);
            }

            foreach (var header in headers)
            {
                if (!HeadersHelper.IsContentHeader(header.Key)) //ignore content headers
                {
                    response.Headers.Add(header.Key, (IEnumerable <string>)header.Value);
                }
            }

            return(response);
        }