public static CloudHttpRequestErrorInfo Create(HttpRequestMessage request, string content) { if (request == null) { throw new ArgumentNullException(nameof(request)); } var cloudHttpRequestErrorInfo = new CloudHttpRequestErrorInfo { Content = content, Version = request.Version }; cloudHttpRequestErrorInfo.CopyHeaders(request.Headers); cloudHttpRequestErrorInfo.CopyHeaders(request.GetContentHeaders()); cloudHttpRequestErrorInfo.Method = request.Method; cloudHttpRequestErrorInfo.RequestUri = request.RequestUri; if (request.Properties != null) { foreach (var property in request.Properties) { cloudHttpRequestErrorInfo.Properties.Add(property.Key, property.Value); } } return(cloudHttpRequestErrorInfo); }
/// <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); }