diff --git a/source/VMelnalksnis.NordigenDotNet/HttpResponseMessageExtensions.cs b/source/VMelnalksnis.NordigenDotNet/HttpResponseMessageExtensions.cs new file mode 100644 index 0000000..91a2fc3 --- /dev/null +++ b/source/VMelnalksnis.NordigenDotNet/HttpResponseMessageExtensions.cs @@ -0,0 +1,22 @@ +// Copyright 2022 Valters Melnalksnis +// Licensed under the Apache License 2.0. +// See LICENSE file in the project root for full license information. + +using System.Net.Http; +using System.Threading.Tasks; + +namespace VMelnalksnis.NordigenDotNet; + +internal static class HttpResponseMessageExtensions +{ + internal static async Task ThrowIfNotSuccessful(this HttpResponseMessage response) + { + if (response.IsSuccessStatusCode) + { + return; + } + + var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + throw new HttpRequestException(content, null, response.StatusCode); + } +} diff --git a/source/VMelnalksnis.NordigenDotNet/NordigenHttpClient.cs b/source/VMelnalksnis.NordigenDotNet/NordigenHttpClient.cs index 6a018ca..e48711c 100644 --- a/source/VMelnalksnis.NordigenDotNet/NordigenHttpClient.cs +++ b/source/VMelnalksnis.NordigenDotNet/NordigenHttpClient.cs @@ -86,39 +86,23 @@ public sealed class NordigenHttpClient { var client = await GetClient().ConfigureAwait(false); var response = await client.PostAsJsonAsync(requestUri, request, _serializerOptions).ConfigureAwait(false); - if (response.IsSuccessStatusCode) - { - return await response.Content.ReadFromJsonAsync(_serializerOptions).ConfigureAwait(false); - } - - var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); - throw new HttpRequestException(content, null, response.StatusCode); + await response.ThrowIfNotSuccessful().ConfigureAwait(false); + return await response.Content.ReadFromJsonAsync(_serializerOptions).ConfigureAwait(false); } internal async Task PutAsJson(string requestUri, TRequest request) { var client = await GetClient().ConfigureAwait(false); var response = await client.PutAsJsonAsync(requestUri, request, _serializerOptions).ConfigureAwait(false); - if (response.IsSuccessStatusCode) - { - return await response.Content.ReadFromJsonAsync(_serializerOptions).ConfigureAwait(false); - } - - var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); - throw new HttpRequestException(content, null, response.StatusCode); + await response.ThrowIfNotSuccessful().ConfigureAwait(false); + return await response.Content.ReadFromJsonAsync(_serializerOptions).ConfigureAwait(false); } internal async Task Delete(string requestUri) { var client = await GetClient().ConfigureAwait(false); var response = await client.DeleteAsync(requestUri).ConfigureAwait(false); - if (response.IsSuccessStatusCode) - { - return; - } - - var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); - throw new HttpRequestException(content, null, response.StatusCode); + await response.ThrowIfNotSuccessful().ConfigureAwait(false); } private async Task GetClient() diff --git a/source/VMelnalksnis.NordigenDotNet/Tokens/TokenClient.cs b/source/VMelnalksnis.NordigenDotNet/Tokens/TokenClient.cs index 5cf28c8..1be9085 100644 --- a/source/VMelnalksnis.NordigenDotNet/Tokens/TokenClient.cs +++ b/source/VMelnalksnis.NordigenDotNet/Tokens/TokenClient.cs @@ -2,7 +2,6 @@ // Licensed under the Apache License 2.0. // See LICENSE file in the project root for full license information. -using System.Net; using System.Net.Http; using System.Net.Http.Json; using System.Text.Json; @@ -32,12 +31,7 @@ internal sealed class TokenClient .PostAsJsonAsync(Routes.Tokens.New, tokenCreation, _tokenCreationInfo) .ConfigureAwait(false); - if (tokenResponse.StatusCode is not HttpStatusCode.OK) - { - var content = await tokenResponse.Content.ReadAsStringAsync().ConfigureAwait(false); - throw new HttpRequestException(content); - } - + await tokenResponse.ThrowIfNotSuccessful().ConfigureAwait(false); var token = await tokenResponse.Content.ReadFromJsonAsync(_tokenInfo).ConfigureAwait(false); return token!; } @@ -48,12 +42,7 @@ internal sealed class TokenClient .PostAsJsonAsync(Routes.Tokens.Refresh, tokenRefresh, _tokenRefreshInfo) .ConfigureAwait(false); - if (tokenResponse.StatusCode is not HttpStatusCode.OK) - { - var content = await tokenResponse.Content.ReadAsStringAsync().ConfigureAwait(false); - throw new HttpRequestException(content, null, tokenResponse.StatusCode); - } - + await tokenResponse.ThrowIfNotSuccessful().ConfigureAwait(false); var accessToken = await tokenResponse.Content.ReadFromJsonAsync(_accessTokenInfo).ConfigureAwait(false); return accessToken!;