Skip to content

Commit 75ecc5f

Browse files
committed
Buf fix: server messages are fetched and displayed correctly
1 parent 7135024 commit 75ecc5f

3 files changed

Lines changed: 49 additions & 19 deletions

File tree

gamevault/Helper/Web/OAuthHttpClient.cs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,7 @@ public async Task<bool> LoginBasicAuthAsync(string username, string password)
4848
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authValue);
4949

5050
var response = await _httpClient.GetAsync($"{ServerUrl}/api/auth/basic/login");
51-
52-
if (!response.IsSuccessStatusCode)
53-
{
54-
using JsonDocument serverResponseJson = JsonDocument.Parse(await response.Content.ReadAsStringAsync());
55-
throw new HttpRequestException(serverResponseJson.RootElement.GetProperty("message").GetString(), null, response.StatusCode);
56-
}
57-
51+
await WebExceptionHelper.EnsureSuccessStatusCode(response);
5852
var responseContent = await response.Content.ReadAsStringAsync();
5953
var json = JsonSerializer.Deserialize<AuthResponse>(responseContent);
6054

gamevault/Helper/Web/WebExceptionHelper.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.Net;
66
using System.Net.Http;
77
using System.Text;
8+
using System.Text.Json;
89
using System.Text.Json.Nodes;
910
using System.Threading.Tasks;
1011

@@ -36,6 +37,40 @@ internal static string TryGetServerMessage(Exception ex)
3637
}
3738
return ex.Message;
3839
}
40+
public static async Task EnsureSuccessStatusCode(HttpResponseMessage msg)
41+
{
42+
if (!msg.IsSuccessStatusCode)
43+
{
44+
string? serverMessage = "";
45+
try
46+
{
47+
string message = await msg.Content.ReadAsStringAsync();
48+
using JsonDocument serverResponseJson = JsonDocument.Parse(message);
49+
if (serverResponseJson.RootElement.TryGetProperty("message", out JsonElement messageElement))
50+
{
51+
serverMessage = messageElement.ValueKind switch
52+
{
53+
JsonValueKind.String => messageElement.GetString(),
54+
JsonValueKind.Array => string.Join("; ", messageElement.EnumerateArray().Select(e => e.GetString())),
55+
_ => ""
56+
};
57+
}
58+
}
59+
catch
60+
{
61+
msg.EnsureSuccessStatusCode();
62+
}
63+
if (string.IsNullOrWhiteSpace(serverMessage))
64+
{
65+
msg.EnsureSuccessStatusCode();
66+
}
67+
else
68+
{
69+
serverMessage = $"Server responded: {serverMessage}";
70+
}
71+
throw new HttpRequestException(serverMessage, null, msg.StatusCode);
72+
}
73+
}
3974
internal static string GetServerStatusCode(Exception ex)
4075
{
4176
if (ex is WebException webex)

gamevault/Helper/Web/WebHelper.cs

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Net.Http;
77
using System.Net.Http.Headers;
88
using System.Text;
9+
using System.Text.Json;
910
using System.Threading.Tasks;
1011
using System.Windows.Media.Imaging;
1112

@@ -61,68 +62,67 @@ internal static void SetAdditionalRequestHeaders(RequestHeader[] additionalReque
6162
internal static async Task<string> BaseGetAsync(string url)
6263
{
6364
var response = await BaseHttpClient.GetAsync(url);
64-
response.EnsureSuccessStatusCode();
65+
await WebExceptionHelper.EnsureSuccessStatusCode(response);
6566
return await response.Content.ReadAsStringAsync();
6667
}
6768
internal static async Task<string> BasePostAsync(string url, string payload)
6869
{
6970
var content = new StringContent(payload, Encoding.UTF8, "application/json");
7071
var response = await BaseHttpClient.PostAsync(url, content);
71-
response.EnsureSuccessStatusCode();
72+
await WebExceptionHelper.EnsureSuccessStatusCode(response);
7273
return await response.Content.ReadAsStringAsync();
7374
}
7475
internal static async Task<string> BaseSendRequest(HttpRequestMessage request)
7576
{
7677
var response = await BaseHttpClient.SendAsync(request);
77-
response.EnsureSuccessStatusCode();
78+
await WebExceptionHelper.EnsureSuccessStatusCode(response);
7879
return await response.Content.ReadAsStringAsync();
7980
}
8081
#endregion
8182
internal static async Task<string> GetAsync(string url)
8283
{
8384
var response = await HttpClient.GetAsync(url, AdditionalRequestHeaders);
84-
response.EnsureSuccessStatusCode();
85+
await WebExceptionHelper.EnsureSuccessStatusCode(response);
8586
return await response.Content.ReadAsStringAsync();
8687
}
8788
internal static async Task<HttpResponseMessage> GetAsync(string url, HttpCompletionOption option = HttpCompletionOption.ResponseContentRead)
8889
{
8990
var response = await HttpClient.GetAsync(url, AdditionalRequestHeaders, option);
90-
response.EnsureSuccessStatusCode();
91+
await WebExceptionHelper.EnsureSuccessStatusCode(response);
9192
return response;
9293
}
9394
internal static async Task<string> PostAsync(string url, string payload)
9495
{
9596
var content = new StringContent(payload, Encoding.UTF8, "application/json");
9697
var response = await HttpClient.PostAsync(url, content, AdditionalRequestHeaders);
97-
response.EnsureSuccessStatusCode();
98+
await WebExceptionHelper.EnsureSuccessStatusCode(response);
9899
return await response.Content.ReadAsStringAsync();
99100
}
100101

101102
internal static async Task<string> PutAsync(string url, string payload)
102103
{
103104
var content = new StringContent(payload, Encoding.UTF8, "application/json");
104105
var response = await HttpClient.PutAsync(url, content, AdditionalRequestHeaders);
105-
response.EnsureSuccessStatusCode();
106+
await WebExceptionHelper.EnsureSuccessStatusCode(response);
106107
return await response.Content.ReadAsStringAsync();
107108
}
108-
109109
internal static async Task<string> DeleteAsync(string url)
110110
{
111111
var response = await HttpClient.DeleteAsync(url, AdditionalRequestHeaders);
112-
response.EnsureSuccessStatusCode();
112+
await WebExceptionHelper.EnsureSuccessStatusCode(response);
113113
return await response.Content.ReadAsStringAsync();
114114
}
115115
public static async Task DownloadImageFromUrlAsync(string imageUrl, string cacheFile)
116116
{
117117
var response = await HttpClient.GetAsync(imageUrl, AdditionalRequestHeaders);
118-
response.EnsureSuccessStatusCode();
118+
await WebExceptionHelper.EnsureSuccessStatusCode(response);
119119
var imageBytes = await response.Content.ReadAsByteArrayAsync();
120120
await File.WriteAllBytesAsync(cacheFile, imageBytes);
121121
}
122122
public static async Task<BitmapImage> DownloadImageFromUrlAsync(string imageUrl)
123123
{
124124
var response = await HttpClient.GetAsync(imageUrl, AdditionalRequestHeaders);
125-
response.EnsureSuccessStatusCode();
125+
await WebExceptionHelper.EnsureSuccessStatusCode(response);
126126
var imageData = await response.Content.ReadAsByteArrayAsync();
127127
using (var memoryStream = new MemoryStream(imageData))
128128
{
@@ -158,7 +158,7 @@ public static async Task<string> UploadFileAsync(string apiUrl, Stream imageStre
158158
imageContent.Headers.ContentType = new MediaTypeHeaderValue(mimeType);
159159
formData.Add(imageContent, "file", fileName);
160160
var response = await HttpClient.PostAsync(apiUrl, formData, mixedHeaders);
161-
response.EnsureSuccessStatusCode();
161+
await WebExceptionHelper.EnsureSuccessStatusCode(response);
162162
var responseContent = await response.Content.ReadAsStringAsync();
163163
return responseContent;
164164
}
@@ -184,6 +184,7 @@ public static string RemoveSpecialCharactersFromUrl(string url)
184184
}
185185
return sb.ToString();
186186
}
187+
187188
}
188189
}
189190

0 commit comments

Comments
 (0)