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);
        }
Пример #2
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);
        }