CookieContainer cookieContainer;
ICredentials credentials;
int maxAutomaticRedirections;
- int maxRequestContentBufferSize;
+ long maxRequestContentBufferSize;
bool preAuthenticate;
IWebProxy proxy;
bool useCookies;
bool useDefaultCredentials;
bool useProxy;
ClientCertificateOption certificate;
+ bool sentRequest;
public HttpClientHandler ()
{
allowAutoRedirect = true;
maxAutomaticRedirections = 50;
- maxRequestContentBufferSize = 0x10000;
+ maxRequestContentBufferSize = int.MaxValue;
useCookies = true;
useProxy = true;
}
+ void EnsureModifiability ()
+ {
+ if (sentRequest)
+ throw new InvalidOperationException (
+ "This instance has already started one or more requests. " +
+ "Properties can only be modified before sending the first request.");
+ }
+
public bool AllowAutoRedirect {
get {
return allowAutoRedirect;
}
set {
+ EnsureModifiability ();
allowAutoRedirect = value;
}
}
return automaticDecompression;
}
set {
+ EnsureModifiability ();
automaticDecompression = value;
}
}
return certificate;
}
set {
+ EnsureModifiability ();
certificate = value;
}
}
return cookieContainer ?? (cookieContainer = new CookieContainer ());
}
set {
+ EnsureModifiability ();
cookieContainer = value;
}
}
return credentials;
}
set {
+ EnsureModifiability ();
credentials = value;
}
}
return maxAutomaticRedirections;
}
set {
+ EnsureModifiability ();
if (value <= 0)
throw new ArgumentOutOfRangeException ();
}
}
- public int MaxRequestContentBufferSize {
+ public long MaxRequestContentBufferSize {
get {
return maxRequestContentBufferSize;
}
set {
+ EnsureModifiability ();
if (value < 0)
throw new ArgumentOutOfRangeException ();
return preAuthenticate;
}
set {
+ EnsureModifiability ();
preAuthenticate = value;
}
}
return proxy;
}
set {
+ EnsureModifiability ();
if (!UseProxy)
throw new InvalidOperationException ();
return useCookies;
}
set {
+ EnsureModifiability ();
useCookies = value;
}
}
return useDefaultCredentials;
}
set {
+ EnsureModifiability ();
useDefaultCredentials = value;
}
}
return useProxy;
}
set {
+ EnsureModifiability ();
useProxy = value;
}
}
if (allowAutoRedirect) {
wr.AllowAutoRedirect = true;
wr.MaximumAutomaticRedirections = maxAutomaticRedirections;
+ } else {
+ wr.AllowAutoRedirect = false;
}
wr.AutomaticDecompression = automaticDecompression;
var key = headers.GetKey(i);
var value = headers.GetValues (i);
+ HttpHeaders item_headers;
if (HttpHeaders.GetKnownHeaderKind (key) == Headers.HttpHeaderKind.Content)
- response.Content.Headers.AddWithoutValidation (key, value);
+ item_headers = response.Content.Headers;
else
- response.Headers.AddWithoutValidation (key, value);
+ item_headers = response.Headers;
+
+ item_headers.TryAddWithoutValidation (key, value);
}
return response;
protected async internal override Task<HttpResponseMessage> SendAsync (HttpRequestMessage request, CancellationToken cancellationToken)
{
+ sentRequest = true;
var wrequest = CreateWebRequest (request);
if (request.Content != null) {
headers.AddValue (header.Key, value);
}
}
-
- var stream = wrequest.GetRequestStream ();
- await request.Content.CopyToAsync (stream);
+
+ var stream = await wrequest.GetRequestStreamAsync ().ConfigureAwait (false);
+ await request.Content.CopyToAsync (stream).ConfigureAwait (false);
}
// FIXME: GetResponseAsync does not accept cancellationToken