From 49313136368279f6326ef072057268efda276561 Mon Sep 17 00:00:00 2001 From: 4sval Date: Sun, 7 Aug 2022 15:26:46 +0200 Subject: [PATCH] should not throw exceptions anymore --- .../ApiEndpoints/DynamicApiEndpoint.cs | 37 +++++++++---------- .../Resources/Controls/EndpointEditor.xaml.cs | 2 +- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/FModel/ViewModels/ApiEndpoints/DynamicApiEndpoint.cs b/FModel/ViewModels/ApiEndpoints/DynamicApiEndpoint.cs index 7ef2b3d2..42808d7d 100644 --- a/FModel/ViewModels/ApiEndpoints/DynamicApiEndpoint.cs +++ b/FModel/ViewModels/ApiEndpoints/DynamicApiEndpoint.cs @@ -18,16 +18,10 @@ public class DynamicApiEndpoint : AbstractApiProvider public async Task GetAesKeysAsync(CancellationToken token, string url, string path) { - var request = new FRestRequest(url) - { - OnBeforeDeserialization = resp => { resp.ContentType = "application/json; charset=utf-8"; } - }; - var response = await _client.ExecuteAsync(request, token).ConfigureAwait(false); - var body = JToken.Parse(response.Content!); - Log.Information("[{Method}] [{Status}({StatusCode})] '{Resource}'", request.Method, response.StatusDescription, (int) response.StatusCode, response.ResponseUri?.OriginalString); - + var body = await GetRequestBody(token, url).ConfigureAwait(false); var tokens = body.SelectTokens(path); - var ret = new AesResponse { MainKey = Helper.FixKey(tokens.ElementAtOrDefault(0).ToString()) }; + + var ret = new AesResponse { MainKey = Helper.FixKey(tokens.ElementAtOrDefault(0)?.ToString()) }; if (tokens.ElementAtOrDefault(1) is JArray dynamicKeys) { foreach (var dynamicKey in dynamicKeys) @@ -52,19 +46,13 @@ public class DynamicApiEndpoint : AbstractApiProvider public async Task GetMappingsAsync(CancellationToken token, string url, string path) { - var request = new FRestRequest(url) - { - OnBeforeDeserialization = resp => { resp.ContentType = "application/json; charset=utf-8"; } - }; - var response = await _client.ExecuteAsync(request, token).ConfigureAwait(false); - var body = JToken.Parse(response.Content!); - Log.Information("[{Method}] [{Status}({StatusCode})] '{Resource}'", request.Method, response.StatusDescription, (int) response.StatusCode, response.ResponseUri?.OriginalString); - + var body = await GetRequestBody(token, url).ConfigureAwait(false); var tokens = body.SelectTokens(path); + var ret = new MappingsResponse[] {new()}; - ret[0].Url = tokens.ElementAtOrDefault(0).ToString(); + ret[0].Url = tokens.ElementAtOrDefault(0)?.ToString(); if (tokens.ElementAtOrDefault(1) is not { } fileName) - fileName = ret[0].Url.SubstringAfterLast("/"); + fileName = ret[0].Url?.SubstringAfterLast("/"); ret[0].FileName = fileName.ToString(); return ret; } @@ -73,4 +61,15 @@ public class DynamicApiEndpoint : AbstractApiProvider { return GetMappingsAsync(token, url, path).GetAwaiter().GetResult(); } + + private async Task GetRequestBody(CancellationToken token, string url) + { + var request = new FRestRequest(url) + { + OnBeforeDeserialization = resp => { resp.ContentType = "application/json; charset=utf-8"; } + }; + var response = await _client.ExecuteAsync(request, token).ConfigureAwait(false); + Log.Information("[{Method}] [{Status}({StatusCode})] '{Resource}'", request.Method, response.StatusDescription, (int) response.StatusCode, response.ResponseUri?.OriginalString); + return string.IsNullOrEmpty(response.Content) ? JToken.Parse("{}") : JToken.Parse(response.Content); + } } diff --git a/FModel/Views/Resources/Controls/EndpointEditor.xaml.cs b/FModel/Views/Resources/Controls/EndpointEditor.xaml.cs index edeb8f61..197ebc9b 100644 --- a/FModel/Views/Resources/Controls/EndpointEditor.xaml.cs +++ b/FModel/Views/Resources/Controls/EndpointEditor.xaml.cs @@ -64,7 +64,7 @@ public partial class EndpointEditor { OnBeforeDeserialization = resp => { resp.ContentType = "application/json; charset=utf-8"; } }).ConfigureAwait(false); - var body = JToken.Parse(response.Content!); + var body = string.IsNullOrEmpty(response.Content) ? JToken.Parse("{}") : JToken.Parse(response.Content); Application.Current.Dispatcher.Invoke(delegate {