private string FormatUrl([NotNull] string endpoint, [NotNull] string path) { if (endpoint == null) { throw new ArgumentNullException(nameof(endpoint)); } if (path == null) { throw new ArgumentNullException(nameof(path)); } return(HttpUtility.ConcatUrl(endpoint, path)); }
public async Task ConnectStreamAsync(string path, IDictionary <string, object> parameter, Func <Stream, Task> streamReader, CancellationToken cancellationToken) { if (path == null) { throw new ArgumentNullException(nameof(path)); } if (parameter == null) { throw new ArgumentNullException(nameof(parameter)); } if (streamReader == null) { throw new ArgumentNullException(nameof(streamReader)); } HttpClient client = null; try { var endpoint = HttpUtility.ConcatUrl(Endpoint, path); var query = parameter.ParametalizeForGet(); if (!String.IsNullOrEmpty(query)) { endpoint += "?" + query; } client = new TwitterApiHttpClient(Credential, Proxy, UserAgent, false); client.Timeout = Timeout.InfiniteTimeSpan; Debug.WriteLine("[GET STREAM] " + endpoint); using (var resp = await client.GetAsync(endpoint, HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false)) using (var stream = await resp.Content.ReadAsStreamAsync().ConfigureAwait(false)) { // winding data from user stream await streamReader(stream).ConfigureAwait(false); } } finally { if (client != null) { client.CancelPendingRequests(); client.Dispose(); } } }