diff --git a/Withings.NET/Client/Authenticator.cs b/Withings.NET/Client/Authenticator.cs index 2358d09..b47a990 100644 --- a/Withings.NET/Client/Authenticator.cs +++ b/Withings.NET/Client/Authenticator.cs @@ -60,8 +60,13 @@ public async Task GetAccessToken(string code) var httpResponse = await _httpClient.PostAsync(TokenUrl, content).ConfigureAwait(false); httpResponse.EnsureSuccessStatusCode(); - var json = await httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); - var response = JsonSerializer.Deserialize>(json); + using var stream = await httpResponse.Content.ReadAsStreamAsync().ConfigureAwait(false); + var response = await JsonSerializer.DeserializeAsync>(stream).ConfigureAwait(false); + + if (response == null) + { + throw new WithingsApiException(-1, "Empty response from Withings API"); + } if (response.Status != 0) { @@ -85,8 +90,13 @@ public async Task RefreshAccessToken(string refreshToken) var httpResponse = await _httpClient.PostAsync(TokenUrl, content).ConfigureAwait(false); httpResponse.EnsureSuccessStatusCode(); - var json = await httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); - var response = JsonSerializer.Deserialize>(json); + using var stream = await httpResponse.Content.ReadAsStreamAsync().ConfigureAwait(false); + var response = await JsonSerializer.DeserializeAsync>(stream).ConfigureAwait(false); + + if (response == null) + { + throw new WithingsApiException(-1, "Empty response from Withings API"); + } if (response.Status != 0) { diff --git a/Withings.NET/Client/WithingsClient.cs b/Withings.NET/Client/WithingsClient.cs index 4525996..b7a7623 100644 --- a/Withings.NET/Client/WithingsClient.cs +++ b/Withings.NET/Client/WithingsClient.cs @@ -31,11 +31,11 @@ private async Task GetAsync(string url, string accessToken) var request = new HttpRequestMessage(HttpMethod.Get, url); request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); - var response = await _httpClient.SendAsync(request).ConfigureAwait(false); + using var response = await _httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false); response.EnsureSuccessStatusCode(); - var json = await response.Content.ReadAsStringAsync().ConfigureAwait(false); - return JsonSerializer.Deserialize(json, _jsonOptions); + using var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false); + return await JsonSerializer.DeserializeAsync(stream, _jsonOptions).ConfigureAwait(false); } private static string BuildUrl(string path, params (string key, string value)[] queryParams)