public async Task <HttpResponseMessage> InterceptResponse(Task <HttpResponseMessage> response, CancellationToken cancellationToken, FitbitClient Client) { if (response.Result.StatusCode == System.Net.HttpStatusCode.Unauthorized)//Unauthorized, then there is a chance token is stale { var responseBody = await response.Result.Content.ReadAsStringAsync(); if (IsTokenStale(responseBody)) { Debug.WriteLine("Stale token detected. Invoking registered tokenManager.RefreskToken to refresh it"); await Client.RefreshOAuth2TokenAsync(); //Only retry the first time. if (!response.Result.RequestMessage.Headers.Contains(CUSTOM_HEADER)) { var clonedRequest = await response.Result.RequestMessage.CloneAsync(); clonedRequest.Headers.Add(CUSTOM_HEADER, CUSTOM_HEADER); return(await Client.HttpClient.SendAsync(clonedRequest, cancellationToken)); } else if (response.Result.RequestMessage.Headers.Contains(CUSTOM_HEADER)) { throw new FitbitTokenException(response.Result, message: $"In interceptor {nameof(OAuth2AutoRefreshInterceptor)} inside method {nameof(InterceptResponse)} we received an unexpected stale token response - during the retry for a call whose token we just refreshed {response.Result.StatusCode}"); } } } //let the pipeline continue return(null); }