static void CreateAndPrepareWebRequest(HttpTransportAsyncResult self)
{
Trace(self, "CreateAndPrepareRequest");
var request = self.request;
var settings = self.settings;
var http = (HttpWebRequest)WebRequest.Create(request.Uri);
http.Method = request.Method;
CopySettingsToHttpWebRequest(settings, http);
HttpWebRequestTransportSettings messageSettings = request.GetPropertyOrDefault <HttpWebRequestTransportSettings>();
if (messageSettings != null)
{
CopySettingsToHttpWebRequest(messageSettings, http);
}
var calc = HttpMessageCore.CalculateEffectiveContentType(request);
if (calc != request.Headers.ContentType)
{
request.Headers.ContentType = calc;
}
if (!HttpContent.IsNullOrEmpty(request.Content) && request.Content.HasLength())
{
if (request.Headers.ContentLength == null)
{
request.Headers.ContentLength = request.Content.GetLength();
}
}
CopyHeadersToHttpWebRequest(request.Headers, http);
if (http.Method == "GET" && http.ContentLength >= 0)
{
throw new NotSupportedException("can't set Content-Length to " + http.ContentLength + " on " + http.Method);
}
if (http.Method == "GET" && !HttpContent.IsNullOrEmpty(request.Content))
{
throw new NotSupportedException("can't set a non-IsEmpty content on a GET: " + self.request.Content);
}
self.webRequest = http;
}