예제 #1
0
        /// <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);
        }