diff --git a/OF DL/Helpers/APIHelper.cs b/OF DL/Helpers/APIHelper.cs index d82be2f..966b2e7 100644 --- a/OF DL/Helpers/APIHelper.cs +++ b/OF DL/Helpers/APIHelper.cs @@ -116,18 +116,34 @@ public class APIHelper : IAPIHelper } - private async Task BuildHeaderAndExecuteRequests(Dictionary getParams, string endpoint, HttpClient client) + private async Task BuildHeaderAndExecuteRequests(Dictionary getParams, string endpoint, HttpClient client, int attemptNumber = 1) { - Log.Debug("Calling BuildHeaderAndExecuteRequests"); + const int MAX_ATTEMPTS = 10; + const int DELAY_BEFORE_RETRY = 1000; - HttpRequestMessage request = await BuildHttpRequestMessage(getParams, endpoint); - using var response = await client.SendAsync(request); - response.EnsureSuccessStatusCode(); - string body = await response.Content.ReadAsStringAsync(); + Log.Debug("Calling BuildHeaderAndExecuteRequests -- Attempt number: {AttemptNumber}", attemptNumber); - Log.Debug(body); + try + { + HttpRequestMessage request = await BuildHttpRequestMessage(getParams, endpoint); + using var response = await client.SendAsync(request); + response.EnsureSuccessStatusCode(); + string body = await response.Content.ReadAsStringAsync(); - return body; + Log.Debug(body); + + return body; + } + catch (HttpRequestException ex) + { + if (ex.StatusCode == System.Net.HttpStatusCode.TooManyRequests && attemptNumber <= MAX_ATTEMPTS) + { + await Task.Delay(DELAY_BEFORE_RETRY); + return await BuildHeaderAndExecuteRequests(getParams, endpoint, client, ++attemptNumber); + } + + throw; + } }