/// <summary>
        /// Creates a new CloudHttpRequestErrorInfo from a HttpRequestMessage.
        /// </summary>
        /// <param name="request">The request message.</param>
        /// <param name="content">
        /// The request content, which may be passed separately if the request
        /// has already been disposed.
        /// </param>
        /// <returns>A CloudHttpRequestErrorInfo instance.</returns>
        public static CloudHttpRequestErrorInfo Create(HttpRequestMessage request, string content)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            CloudHttpRequestErrorInfo info = new CloudHttpRequestErrorInfo();

            // Copy CloudHttpErrorInfo properties
            info.Content = content;
            info.Version = request.Version;
            info.CopyHeaders(request.Headers);
            info.CopyHeaders(request.GetContentHeaders());

            // Copy CloudHttpRequestErrorInfo properties
            info.Method = request.Method;
            info.RequestUri = request.RequestUri;
            if (request.Properties != null)
            {
                foreach (KeyValuePair<string, object> pair in request.Properties)
                {
                    info.Properties[pair.Key] = pair.Value;
                }
            }
            
            return info;
        }
        /// <summary>
        /// Initializes a new instance of the HttpRequestMessageWrapper class from HttpRequestMessage
        /// and content.
        /// </summary>
        public HttpRequestMessageWrapper(HttpRequestMessage httpRequest, string content)
        {
            if (httpRequest == null)
            {
                throw new ArgumentNullException("httpRequest");
            }

            this.CopyHeaders(httpRequest.Headers);
            this.CopyHeaders(httpRequest.GetContentHeaders());

            this.Content = content;
            this.Method = httpRequest.Method;
            this.RequestUri = httpRequest.RequestUri;
            if (httpRequest.Properties != null)
            {
                Properties = new Dictionary<string, object>();
                foreach (KeyValuePair<string, object> pair in httpRequest.Properties)
                {
                    this.Properties[pair.Key] = pair.Value;
                }
            }
        }
        /// <summary>
        /// Append an HTTP request.
        /// </summary>
        /// <param name="text">The StringBuilder.</param>
        /// <param name="request">The request message.</param>
        public static void AppendHttpRequest(this StringBuilder text, HttpRequestMessage request)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            text.AppendHttpRequest(
                request.Method,
                request.RequestUri,
                request.Version,
                request.Headers,
                request.GetContentHeaders(),
                request.Properties,
                request.Content.AsString());
        }