/// <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; }