void PrepareRequest(ref HttpRequestMessage request)
{
// post-condition: request != null && !string.IsNullOrEmpty(request.Method) && request.Uri != null && request.Uri.IsAbsoluteUri && !request.HasBeenSent;
if (disposed && request != null)
{
request.Dispose();
}
ThrowIfDisposed();
if (request == null)
{
throw new ArgumentNullException("request");
}
bool hasDefaultBaseAddress = this.address != null;
if (request == null)
{
if (!hasDefaultBaseAddress)
{
throw new ArgumentNullException("request", "request is null and BaseAddress is null");
}
request = new HttpRequestMessage();
}
if (request.HasBeenSent)
{
request.Dispose();
throw new InvalidOperationException(request + " has already been sent");
}
if (request.Uri == null)
{
if (!hasDefaultBaseAddress)
{
request.Dispose();
throw new ArgumentNullException("request", "request.Uri is null and DefaultRequest.BaseAddress is null");
}
request.Uri = this.BaseAddress;
}
else if (!request.Uri.IsAbsoluteUri)
{
if (!hasDefaultBaseAddress)
{
request.Dispose();
throw new UriFormatException("request.Uri is relative (" + request.Uri + ") and DefaultRequest.BaseAddress is null");
}
request.Uri = new Uri(this.BaseAddress, request.Uri);
}
if (string.IsNullOrEmpty(request.Method))
{
request.Dispose();
throw new ArgumentOutOfRangeException("request", "request.Method is null or empty");
}
if (defaultHeaders != null)
{
foreach (var h in defaultHeaders.Keys)
{
if (request.Headers.ContainsKey(h))
{
continue;
}
foreach (var v in defaultHeaders.GetValues(h))
{
request.Headers.Add(h, v);
}
}
}
request.HasBeenSent = true;
}