Example #1
0
        /// <summary>
        /// Modifies the OData get responses to use the mock server's Uri.
        /// </summary>
        public static void FixODataResponseUri(
            HttpMessage.Response response,
            Uri serviceUri,
            Uri mockServerUri)
        {
            if (serviceUri != null &&
                response.ResponseText.Contains("dataservices") &&
                response.ResponseText.Contains("</entry>"))
            {
                response.ResponseText =
                    response.ResponseText.Replace(serviceUri.ToString(), mockServerUri.ToString());
            }

            if (serviceUri != null &&
                response.Headers.Contains("Location"))
            {
                response.Headers["Location"] = response.Headers["Location"].Replace(
                    serviceUri.ToString(),
                    mockServerUri.ToString());
            }
        }
        /// <summary>
        /// Create an <see cref="HttpMessage.Response"/> object out of the response from a
        /// service.
        /// </summary>
        /// <param name="serviceBaseUri">The real service's base Uri.</param>
        /// <param name="response">The response from the service.</param>
        /// <returns>An <see cref="HttpMessage.Response"/> object containing the response.</returns>
        private static HttpMessage.Response ConstructResponseInfo(
            Uri serviceBaseUri,
            HttpWebResponse response)
        {
            HttpMessage.Response responseInfo = new HttpMessage.Response();

            // Copy the response status code
            responseInfo.StatusCode = response.StatusCode;

            // Copy all relevant headers to the response
            responseInfo.Headers = new HttpMessage.HeaderCollection();
            foreach (string headerKey in response.Headers.AllKeys)
            {
                if (!headerKey.Equals("Transfer-Encoding", StringComparison.OrdinalIgnoreCase) &&
                    !headerKey.Equals("Content-Length", StringComparison.OrdinalIgnoreCase))
                {
                    responseInfo.Headers.Add(new HttpMessage.Header()
                    {
                        Name = headerKey,
                        Value = response.Headers[headerKey]
                    });
                }
            }

            // Copy response cookies
            responseInfo.Cookies = new HttpMessage.CookieCollection();
            foreach (Cookie cookie in response.Cookies)
            {
                Uri cookieHostUri = new Uri(serviceBaseUri.Scheme + Uri.SchemeDelimiter + serviceBaseUri.Host);
                Uri cookieUri = new Uri(cookieHostUri, cookie.Path);
                Uri cookieRelativeUri = serviceBaseUri.MakeRelativeUri(cookieUri);
                responseInfo.Cookies.Add(new HttpMessage.Cookie
                {
                    Name = cookie.Name,
                    Value = cookie.Value,
                    RelativeUri = cookieRelativeUri
                });
            }

            // Copy response stream
            using (StreamReader reader = new StreamReader(response.GetResponseStream()))
            {
                responseInfo.ResponseText = reader.ReadToEnd();
            }

            return responseInfo;
        }