/// <summary> /// Extract API response entity from web response /// </summary> /// <typeparam name="TResponse">Response type</typeparam> /// <returns></returns> protected TResponse ExtractAPIResponse <TResponse>(HttpWebResponse resp) where TResponse : APIResponse { // Get response content var content = resp.GetResponseContent(); // Parse it var response = ParseResponseContent <TResponse>(content); // Check if valid if (response.IsValid) { // Is valid return(response); } // Check if over query limit if (response.IsOverQueryLimit) { // Retriable exception throw new RetriableRequestException(); } // API error if (response.HasErrorMessage) { throw new APIErrorException(response.Status, response.ErrorMessage); } throw new APIErrorException(response.Status); }
private static GetDistanceMatrixResponse ExtractResponseBody(HttpWebResponse webResponse) { var response = JsonConvert.DeserializeObject <GetDistanceMatrixResponse>(webResponse.GetResponseContent()); if (response.IsOverQueryLimit && response.HasErrorMessage && response.ErrorMessage.ToLower().Contains("daily request quota")) { throw new Exception("Over query limit"); } return(response); }
public static void TraceResponse(this HttpWebResponse response, IProgress <string> progress) { if (response == null) { throw new ArgumentNullException("response"); } if (progress == null) { return; } var headerStringBuilder = new StringBuilder(); foreach (var header in response.Headers.AllKeys) { headerStringBuilder.AppendFormat("{0}{1}='{2}'", Environment.NewLine, header, response.Headers[header]); } var sb = new StringBuilder(); sb.AppendFormat("[{0}] Response> ", GetTimeString()); sb.AppendFormat("({0} {1}) ", (int)response.StatusCode, response.StatusCode); sb.AppendFormat("{0} ", response.Method); sb.Append(response.ResponseUri); sb.AppendLine(""); sb.AppendLine(headerStringBuilder.ToString()); sb.AppendLine(""); sb.AppendLine(response.GetResponseContent()); progress.Report(sb.ToString()); }
/// <summary> /// Get response body /// </summary> /// <param name="resp">Response</param> /// <returns>Body</returns> private string GetBody(HttpWebResponse resp) { // Get response content return(resp.GetResponseContent()); }