X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem.Net.Http%2FSystem.Net.Http%2FHttpClient.cs;h=c9fd2354abe136be56708c73b9a2bf30ff6f2098;hb=3741d16503a973a99c724bdab9a255a5f07a3637;hp=1e1fcbf1021ffd69ea9e7814a9b69bbffec4c2c5;hpb=8cabf341f7172e7c96d7c4eb72636d9729bc2a2a;p=mono.git diff --git a/mcs/class/System.Net.Http/System.Net.Http/HttpClient.cs b/mcs/class/System.Net.Http/System.Net.Http/HttpClient.cs index 1e1fcbf1021..c9fd2354abe 100644 --- a/mcs/class/System.Net.Http/System.Net.Http/HttpClient.cs +++ b/mcs/class/System.Net.Http/System.Net.Http/HttpClient.cs @@ -33,7 +33,7 @@ using System.IO; namespace System.Net.Http { - public class HttpClient : HttpMessageInvoker + public partial class HttpClient : HttpMessageInvoker { static readonly TimeSpan TimeoutDefault = TimeSpan.FromSeconds (100); @@ -44,10 +44,12 @@ namespace System.Net.Http long buffer_size; TimeSpan timeout; +#if !XAMARIN_MODERN public HttpClient () : this (new HttpClientHandler (), true) { } +#endif public HttpClient (HttpMessageHandler handler) : this (handler, true) @@ -94,7 +96,7 @@ namespace System.Net.Http return timeout; } set { - if (value != System.Threading.Timeout.InfiniteTimeSpan && value < TimeSpan.Zero) + if (value != System.Threading.Timeout.InfiniteTimeSpan && (value <= TimeSpan.Zero || value.Ticks > int.MaxValue)) throw new ArgumentOutOfRangeException (); timeout = value; @@ -146,7 +148,7 @@ namespace System.Net.Http public Task GetAsync (string requestUri, CancellationToken cancellationToken) { - return SendAsync (new HttpRequestMessage (HttpMethod.Get, requestUri)); + return SendAsync (new HttpRequestMessage (HttpMethod.Get, requestUri), cancellationToken); } public Task GetAsync (string requestUri, HttpCompletionOption completionOption) @@ -242,16 +244,17 @@ namespace System.Net.Http if (request.SetIsUsed ()) throw new InvalidOperationException ("Cannot send the same request message multiple times"); - if (request.RequestUri == null) { + var uri = request.RequestUri; + if (uri == null) { if (base_address == null) throw new InvalidOperationException ("The request URI must either be an absolute URI or BaseAddress must be set"); request.RequestUri = base_address; - } else if (!request.RequestUri.IsAbsoluteUri) { + } else if (!uri.IsAbsoluteUri || uri.Scheme == Uri.UriSchemeFile && uri.OriginalString.StartsWith ("/", StringComparison.Ordinal)) { if (base_address == null) throw new InvalidOperationException ("The request URI must either be an absolute URI or BaseAddress must be set"); - request.RequestUri = new Uri (base_address, request.RequestUri); + request.RequestUri = new Uri (base_address, uri); } if (headers != null) { @@ -303,14 +306,14 @@ namespace System.Net.Http public async Task GetStreamAsync (string requestUri) { - var resp = await GetAsync (requestUri, HttpCompletionOption.ResponseContentRead).ConfigureAwait (false); + var resp = await GetAsync (requestUri, HttpCompletionOption.ResponseHeadersRead).ConfigureAwait (false); resp.EnsureSuccessStatusCode (); return await resp.Content.ReadAsStreamAsync ().ConfigureAwait (false); } public async Task GetStreamAsync (Uri requestUri) { - var resp = await GetAsync (requestUri, HttpCompletionOption.ResponseContentRead).ConfigureAwait (false); + var resp = await GetAsync (requestUri, HttpCompletionOption.ResponseHeadersRead).ConfigureAwait (false); resp.EnsureSuccessStatusCode (); return await resp.Content.ReadAsStreamAsync ().ConfigureAwait (false); }