public string Format(IRestRequest request)
        {
            var sb = new StringBuilder();

            using (var writer = new StringWriter(sb)) {
                writer.WriteLine($"{request.Method} {MakeResourceandQuery(request)}");
                foreach (var header in request.Headers())
                {
                    writer.WriteLine($"{header.Key}: {header.Value}");
                }

                var body = request.Body();
                if (body != null)
                {
                    WriteBody(writer, body);
                }

                writer.Flush();
            }

            return(sb.ToString());
        }
        internal static HttpRequestMessage AsHttpRequestMessage(this IRestRequest request, IRestClient client)
        {
            var uri = UriHelper.MakeUri(client.Settings.BaseUri, request);

            var httpRequest = new HttpRequestMessage(request.Method, uri);

            if (request.Method == HttpMethod.Post ||
                request.Method == HttpMethod.Put)
            {
                HttpContent content = null;

                if (request.HasBody())
                {
                    content = request.Body().GetHttpContent(client);
                }
                else if (request.HasFiles())
                {
                    var files = request.Files().ToList();
                    if (files.Count > 1)
                    {
                        content = MakeFileMultipart(client, request.Files());
                    }
                    else
                    {
                        content = files[0].GetFileContent(client, false);
                    }
                }

                httpRequest.Content = content;
            }

            if (request.HasHeaders())
            {
                foreach (var header in request.Headers())
                {
                    httpRequest.Headers.Add(header.Key, SafeValue(header.Value));
                }
            }

            if (request.Returned != null && !request.Returned.IsVoid())
            {
                if (request.Returned.IsFile())
                {
                    var contentType = request.Returned.ContentType;
                    if (!String.IsNullOrEmpty(contentType))
                    {
                        httpRequest.Headers.Accept.Add(MediaTypeWithQualityHeaderValue.Parse(contentType));
                    }
                }
                else
                {
                    var contentFormat = request.Returned.ContentFormat();
                    if (contentFormat == ContentFormat.Default)
                    {
                        contentFormat = client.Settings.DefaultFormat;
                    }

                    var serializer = client.Settings.Serializer(contentFormat);
                    if (serializer == null)
                    {
                        throw new InvalidOperationException($"No serializer was configured to handle the format {contentFormat} required.");
                    }

                    var contentTypes = serializer.ContentTypes;

                    foreach (var contentType in contentTypes)
                    {
                        httpRequest.Headers.Accept.Add(MediaTypeWithQualityHeaderValue.Parse(contentType));
                    }
                }
            }

            return(httpRequest);
        }