private async Task <string> RefreshAsync() { string responseJson; DateTime tokenCreateTimeUtc; using (var requestMessage = new HttpRequestMessage(HttpMethod.Post, tokenUri)) { requestMessage.Content = new FormUrlEncodedContent(new Dictionary <string, string> { ["type"] = "refresh", ["refresh_token"] = refreshToken, ["client_id"] = oauthOptions.ClientId, ["redirect_uri"] = oauthOptions.RedirectUrl, ["client_secret"] = oauthOptions.ClientSecret, }); requestMessage.Headers.UserAgent.TryParseAdd(userAgent); using (var httpClient = httpClientPool.Create()) using (var responseMessage = await httpClient.SendAsync(requestMessage)) { await HttpResponseUtils.EnsureSuccessAsync(responseMessage); tokenCreateTimeUtc = DateTime.UtcNow; responseJson = await responseMessage.Content.ReadAsStringAsync(); } } var tokenResponse = JsonConvert.DeserializeObject <TokenResponse>(responseJson); this.accessToken = tokenResponse.AccessToken; this.estimatedAccessTokenExpirationUtc = ParseExpiresIn(tokenResponse.ExpiresIn, tokenCreateTimeUtc); return(accessToken); }
private async Task <IPageCollection <T> > GetPageCollectionAsync <T>(Uri uri, string accessToken, CancellationToken cancellationToken) { IResponseMessageCacheEntry responseMessageCacheEntry = null; if (responseMessageCache != null) { responseMessageCacheEntry = await responseMessageCache.GetAsync(uri); } await rateLimiter.WaitIfNecessaryAsync(); string responseJson; Uri nextUri; using (var requestMessage = CreateRequest(HttpMethod.Get, uri, accessToken: accessToken, responseMessageCacheEntry: responseMessageCacheEntry)) using (var httpClient = httpClientPool.Create()) using (var responseMessage = await httpClient.SendAsync(requestMessage, cancellationToken)) { var localResponseMessage = responseMessage; if (responseMessage.StatusCode == System.Net.HttpStatusCode.NotModified && responseMessageCacheEntry != null) { localResponseMessage = responseMessageCacheEntry.ToResponseMessage(); } else { await HttpResponseUtils.EnsureSuccessAsync(responseMessage); } responseJson = await localResponseMessage.Content.ReadAsStringAsync(); nextUri = HttpResponseUtils.ParseNextUriOrNull(localResponseMessage); if (responseMessageCacheEntry == null) { await CacheResponseMessageAsync(uri, localResponseMessage, responseJson); } } var elements = JsonConvert.DeserializeObject <IReadOnlyCollection <T> >(responseJson); return(new PageCollection <T>(elements, nextUri, this)); }