bool useDefaultCredentials;
bool useProxy;
ClientCertificateOption certificate;
+ bool sentRequest;
public HttpClientHandler ()
{
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 ();
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;
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