/// <summary> /// Create a CloudException from a failed response. /// </summary> /// <param name="request">The HTTP request.</param> /// <param name="requestContent">The HTTP request content.</param> /// <param name="response">The HTTP response.</param> /// <param name="responseContent">The HTTP response content.</param> /// <param name="innerException">Optional inner exception.</param> /// <returns>A CloudException representing the failure.</returns> public static CloudException Create(HttpRequestMessage request, string requestContent, HttpResponseMessage response, string responseContent, Exception innerException = null) { string reasonPhrase; var cloudError = ParseXmlOrJsonError(responseContent); var code = cloudError.Code; var message = cloudError.Message; if (code != null && message != null) { reasonPhrase = string.Concat(code, ": ", message); } else if (message != null) { reasonPhrase = message; } else if (code != null) { reasonPhrase = code; } else if (!string.IsNullOrEmpty(responseContent)) { reasonPhrase = responseContent; } else if (response?.ReasonPhrase == null) { reasonPhrase = response?.StatusCode.ToString() ?? new InvalidOperationException().Message; } else { reasonPhrase = response.ReasonPhrase; } var cloudException = new CloudException(reasonPhrase, innerException) { Error = cloudError, Request = CloudHttpRequestErrorInfo.Create(request, requestContent), Response = CloudHttpResponseErrorInfo.Create(response, responseContent) }; return(cloudException); }
/// <summary> /// Creates a new CloudHttpResponseErrorInfo from a HttpResponseMessage. /// </summary> /// <param name="response">The response message.</param> /// <param name="content"> /// The response content, which may be passed separately if the /// response has already been disposed. /// </param> /// <returns>A CloudHttpResponseErrorInfo instance.</returns> public static CloudHttpResponseErrorInfo Create(HttpResponseMessage response, string content) { if (response == null) { throw new ArgumentNullException(nameof(response)); } var cloudHttpResponseErrorInfo = new CloudHttpResponseErrorInfo { Content = content, Version = response.Version }; cloudHttpResponseErrorInfo.CopyHeaders(response.Headers); cloudHttpResponseErrorInfo.CopyHeaders(response.GetContentHeaders()); cloudHttpResponseErrorInfo.StatusCode = response.StatusCode; cloudHttpResponseErrorInfo.ReasonPhrase = response.ReasonPhrase; return(cloudHttpResponseErrorInfo); }