From f7ba9c669f9d9f074cbdc57a98af41b10e528122 Mon Sep 17 00:00:00 2001 From: GH Actions Docs Builder Date: Sun, 13 Oct 2024 00:38:27 +0200 Subject: [PATCH] Only parse JSON when content-type is set to JSON --- SpotifyAPI.Web/Clients/FollowClient.cs | 4 +-- SpotifyAPI.Web/Clients/PlayerClient.cs | 28 +++++++++---------- .../Http/NewtonsoftJSONSerializer.cs | 5 +--- SpotifyAPI.Web/Util/HTTP.cs | 12 ++++++++ 4 files changed, 29 insertions(+), 20 deletions(-) create mode 100644 SpotifyAPI.Web/Util/HTTP.cs diff --git a/SpotifyAPI.Web/Clients/FollowClient.cs b/SpotifyAPI.Web/Clients/FollowClient.cs index 204aab5a0..14c7e92d1 100644 --- a/SpotifyAPI.Web/Clients/FollowClient.cs +++ b/SpotifyAPI.Web/Clients/FollowClient.cs @@ -33,7 +33,7 @@ public async Task Follow(FollowRequest request, CancellationToken cancel = var statusCode = await API .Put(URLs.CurrentUserFollower(), request.BuildQueryParams(), request.BuildBodyParams(), cancel) .ConfigureAwait(false); - return statusCode == HttpStatusCode.NoContent; + return HTTPUtil.StatusCodeIsSuccess(statusCode); } public async Task FollowPlaylist(string playlistId, CancellationToken cancel = default) @@ -78,7 +78,7 @@ public async Task Unfollow(UnfollowRequest request, CancellationToken canc var statusCode = await API .Delete(URLs.CurrentUserFollower(), request.BuildQueryParams(), request.BuildBodyParams(), cancel) .ConfigureAwait(false); - return statusCode == HttpStatusCode.NoContent; + return HTTPUtil.StatusCodeIsSuccess(statusCode); } public async Task UnfollowPlaylist(string playlistId, CancellationToken cancel = default) diff --git a/SpotifyAPI.Web/Clients/PlayerClient.cs b/SpotifyAPI.Web/Clients/PlayerClient.cs index 5fdf3fb65..545918c0c 100644 --- a/SpotifyAPI.Web/Clients/PlayerClient.cs +++ b/SpotifyAPI.Web/Clients/PlayerClient.cs @@ -15,7 +15,7 @@ public async Task AddToQueue(PlayerAddToQueueRequest request, Cancellation Ensure.ArgumentNotNull(request, nameof(request)); HttpStatusCode statusCode = await API.Post(URLs.PlayerQueue(), request.BuildQueryParams(), null, cancel).ConfigureAwait(false); - return statusCode == HttpStatusCode.NoContent; + return HTTPUtil.StatusCodeIsSuccess(statusCode); } public Task GetQueue(CancellationToken cancel = default) @@ -62,7 +62,7 @@ public Task> GetRecentlyPlayed(PlayerRecentlyPlaye public async Task PausePlayback(CancellationToken cancel = default) { HttpStatusCode statusCode = await API.Put(URLs.PlayerPause(), null, null, cancel).ConfigureAwait(false); - return statusCode == HttpStatusCode.NoContent; + return HTTPUtil.StatusCodeIsSuccess(statusCode); } public async Task PausePlayback(PlayerPausePlaybackRequest request, CancellationToken cancel = default) @@ -70,13 +70,13 @@ public async Task PausePlayback(PlayerPausePlaybackRequest request, Cancel Ensure.ArgumentNotNull(request, nameof(request)); HttpStatusCode statusCode = await API.Put(URLs.PlayerPause(), request.BuildQueryParams(), null, cancel).ConfigureAwait(false); - return statusCode == HttpStatusCode.NoContent; + return HTTPUtil.StatusCodeIsSuccess(statusCode); } public async Task ResumePlayback(CancellationToken cancel = default) { HttpStatusCode statusCode = await API.Put(URLs.PlayerResume(), null, null, cancel).ConfigureAwait(false); - return statusCode == HttpStatusCode.NoContent; + return HTTPUtil.StatusCodeIsSuccess(statusCode); } public async Task ResumePlayback(PlayerResumePlaybackRequest request, CancellationToken cancel = default) @@ -86,7 +86,7 @@ public async Task ResumePlayback(PlayerResumePlaybackRequest request, Canc HttpStatusCode statusCode = await API .Put(URLs.PlayerResume(), request.BuildQueryParams(), request.BuildBodyParams(), cancel) .ConfigureAwait(false); - return statusCode == HttpStatusCode.NoContent; + return HTTPUtil.StatusCodeIsSuccess(statusCode); } public async Task SeekTo(PlayerSeekToRequest request, CancellationToken cancel = default) @@ -94,7 +94,7 @@ public async Task SeekTo(PlayerSeekToRequest request, CancellationToken ca Ensure.ArgumentNotNull(request, nameof(request)); HttpStatusCode statusCode = await API.Put(URLs.PlayerSeek(), request.BuildQueryParams(), null, cancel).ConfigureAwait(false); - return statusCode == HttpStatusCode.NoContent; + return HTTPUtil.StatusCodeIsSuccess(statusCode); } public async Task SetRepeat(PlayerSetRepeatRequest request, CancellationToken cancel = default) @@ -102,7 +102,7 @@ public async Task SetRepeat(PlayerSetRepeatRequest request, CancellationTo Ensure.ArgumentNotNull(request, nameof(request)); HttpStatusCode statusCode = await API.Put(URLs.PlayerRepeat(), request.BuildQueryParams(), null, cancel).ConfigureAwait(false); - return statusCode == HttpStatusCode.NoContent; + return HTTPUtil.StatusCodeIsSuccess(statusCode); } public async Task SetShuffle(PlayerShuffleRequest request, CancellationToken cancel = default) @@ -110,7 +110,7 @@ public async Task SetShuffle(PlayerShuffleRequest request, CancellationTok Ensure.ArgumentNotNull(request, nameof(request)); HttpStatusCode statusCode = await API.Put(URLs.PlayerShuffle(), request.BuildQueryParams(), null, cancel).ConfigureAwait(false); - return statusCode == HttpStatusCode.NoContent; + return HTTPUtil.StatusCodeIsSuccess(statusCode); } public async Task SetVolume(PlayerVolumeRequest request, CancellationToken cancel = default) @@ -118,13 +118,13 @@ public async Task SetVolume(PlayerVolumeRequest request, CancellationToken Ensure.ArgumentNotNull(request, nameof(request)); HttpStatusCode statusCode = await API.Put(URLs.PlayerVolume(), request.BuildQueryParams(), null, cancel).ConfigureAwait(false); - return statusCode == HttpStatusCode.NoContent; + return HTTPUtil.StatusCodeIsSuccess(statusCode); } public async Task SkipNext(CancellationToken cancel = default) { HttpStatusCode statusCode = await API.Post(URLs.PlayerNext(), null, null, cancel).ConfigureAwait(false); - return statusCode == HttpStatusCode.NoContent; + return HTTPUtil.StatusCodeIsSuccess(statusCode); } public async Task SkipNext(PlayerSkipNextRequest request, CancellationToken cancel = default) @@ -132,13 +132,13 @@ public async Task SkipNext(PlayerSkipNextRequest request, CancellationToke Ensure.ArgumentNotNull(request, nameof(request)); HttpStatusCode statusCode = await API.Post(URLs.PlayerNext(), request.BuildQueryParams(), null, cancel).ConfigureAwait(false); - return statusCode == HttpStatusCode.NoContent; + return HTTPUtil.StatusCodeIsSuccess(statusCode); } public async Task SkipPrevious(CancellationToken cancel = default) { HttpStatusCode statusCode = await API.Post(URLs.PlayerPrevious(), null, null, cancel).ConfigureAwait(false); - return statusCode == HttpStatusCode.NoContent; + return HTTPUtil.StatusCodeIsSuccess(statusCode); } public async Task SkipPrevious(PlayerSkipPreviousRequest request, CancellationToken cancel = default) @@ -146,7 +146,7 @@ public async Task SkipPrevious(PlayerSkipPreviousRequest request, Cancella Ensure.ArgumentNotNull(request, nameof(request)); HttpStatusCode statusCode = await API.Post(URLs.PlayerPrevious(), request.BuildQueryParams(), null, cancel).ConfigureAwait(false); - return statusCode == HttpStatusCode.NoContent; + return HTTPUtil.StatusCodeIsSuccess(statusCode); } public async Task TransferPlayback(PlayerTransferPlaybackRequest request, CancellationToken cancel = default) @@ -154,7 +154,7 @@ public async Task TransferPlayback(PlayerTransferPlaybackRequest request, Ensure.ArgumentNotNull(request, nameof(request)); HttpStatusCode statusCode = await API.Put(URLs.Player(), null, request.BuildBodyParams(), cancel).ConfigureAwait(false); - return statusCode == HttpStatusCode.NoContent; + return HTTPUtil.StatusCodeIsSuccess(statusCode); } } } diff --git a/SpotifyAPI.Web/Http/NewtonsoftJSONSerializer.cs b/SpotifyAPI.Web/Http/NewtonsoftJSONSerializer.cs index c1a79be8d..39f383ac7 100644 --- a/SpotifyAPI.Web/Http/NewtonsoftJSONSerializer.cs +++ b/SpotifyAPI.Web/Http/NewtonsoftJSONSerializer.cs @@ -30,10 +30,7 @@ public IAPIResponse DeserializeResponse(IResponse response) { Ensure.ArgumentNotNull(response, nameof(response)); - if ( - ( - response.ContentType?.Equals("application/json", StringComparison.Ordinal) is true || response.ContentType == null - )) + if (response.ContentType?.Equals("application/json", StringComparison.OrdinalIgnoreCase) is true) { var body = JsonConvert.DeserializeObject(response.Body as string ?? "", _serializerSettings); return new APIResponse(response, body!); diff --git a/SpotifyAPI.Web/Util/HTTP.cs b/SpotifyAPI.Web/Util/HTTP.cs new file mode 100644 index 000000000..a04196f1a --- /dev/null +++ b/SpotifyAPI.Web/Util/HTTP.cs @@ -0,0 +1,12 @@ +using System.Net; + +namespace SpotifyAPI.Web +{ + internal static class HTTPUtil + { + public static bool StatusCodeIsSuccess(HttpStatusCode statusCode) + { + return ((int)statusCode >= 200) && ((int)statusCode <= 299); + } + } +}