/// <summary> /// Gibt einen <see cref="HttpClient"/> fertig konfiguriert für API-Abfragen zurück. /// </summary> /// <returns></returns> private async Task <HttpClient> GetHttpClientAsync() { // Token aus dem DataStore laden. Token token = await _client.Options.DataStore.GetAsync(_client.Options.Credentials.GetCredentials().Key); // Prüfen ob ein Token aus dem DataStore geladen werden konnte. Wenn ja muss geprüft // werden ob dieser noch gültig ist. Wenn das Token gültig ist, wird es zurückgegeben. // Falls es nicht gültig ist, wird versucht ein neues anzufordern. if (token != null) { try { string payload = Jose.JWT.Payload(_client.Context.AccessToken.AccessToken); JwtToken jwtToken = await Task.Run(() => JsonConvert.DeserializeObject <JwtToken>(payload)); DateTimeOffset date = DateTimeOffset.FromUnixTimeSeconds(jwtToken.ExpirationTime); if (date.UtcDateTime < DateTime.UtcNow) { token = null; } } catch { if (token.Issued.Value.AddSeconds(token.ExpiresIn) < DateTime.Now) { token = null; } } } // Falls kein Token vorhanden, neues anfordern. if (token == null) { await _client.ConnectAsync(); if (_client.IsValidated) { token = _client.Context.AccessToken; } else { return(await Task.FromResult <HttpClient>(null)); } } if (_httpClient != null) { _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken); return(_httpClient); } else { var handler = new HttpClientHandler { AutomaticDecompression = DecompressionMethods.GZip }; _httpClient = new HttpClient(handler); _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken); _httpClient.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("gzip")); return(_httpClient); } }