private async Task GetProjectDetailsHttpResponse()

in src/HttpRequestHelper/HttpClientHelper.cs [47:100]


        private async Task<HttpResponseMessage> GetProjectDetailsHttpResponse(string Url)
        {
            NumberOfTries++;
            AuthenticationResult authResult = null;
            HttpResponseMessage response;
            bool isException = false;
            try
            {
                authResult = await AzureAuthenticationHandler.RetrieveAuthenticationToken();
            }
            catch (Exception exCacheTokenRetrieval)
            {
                throw new Exception($"Cached token retrieval failed: {exCacheTokenRetrieval.Message} Please re-login");
            }

            try
            {
                HttpClient httpClient = new HttpClient()
                {
                    Timeout = TimeSpan.FromSeconds(45),
                };

                Uri baseAddress = new Uri(Url);
                string clientRequestId = Guid.NewGuid().ToString();

                httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + authResult.AccessToken);
                httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
                httpClient.DefaultRequestHeaders.Add("x-ms-client-request-id", clientRequestId + "-azmigexp");

                response = await httpClient.GetAsync(baseAddress);
            }
            catch (Exception exProjectDetailsHttpRequest)
            {
                isException = true;
                if (NumberOfTries < HttpUtilities.MaxProjectDetailsRetries && HttpUtilities.IsRetryNeeded(null, exProjectDetailsHttpRequest))
                {
                    Thread.Sleep(10000);
                    response = await GetProjectDetailsHttpResponse(Url);
                }
                else
                    throw;
            }

            if (!isException)
            {
                if((response == null || !response.IsSuccessStatusCode) && HttpUtilities.IsRetryNeeded(response, null) && NumberOfTries < HttpUtilities.MaxProjectDetailsRetries)
                {
                    Thread.Sleep(10000);
                    response = await GetProjectDetailsHttpResponse(Url);
                }
            }

            return response;
        }