private async Task <HttpResponseMessage> SendRequestAsync(string url, HttpMethod httpMethod, string body = null) { if (SessionContext.Current == null) { SessionContext.Authorize(); if (SessionContext.Current != null) { HttpClient.BaseAddress = new Uri(SessionContext.BaseAddress); HttpClient.DefaultRequestHeaders.Add("Cookie", SessionContext.Current.Cookie); } } try { HttpResponseMessage response; bool tryAgain; var i = 0; do { var httpRequest = new HttpRequestMessage(httpMethod, $"/{SessionContext.SgName}/{url}"); if (!string.IsNullOrEmpty(body)) { httpRequest.Content = new StringContent(body, Encoding.UTF8, "application/json"); } response = await HttpClient.SendAsync(httpRequest); if (response.StatusCode != HttpStatusCode.Unauthorized) { tryAgain = false; continue; } SessionContext.Authorize(); HttpClient.DefaultRequestHeaders.Clear(); HttpClient.DefaultRequestHeaders.Add("Cookie", SessionContext.Current.Cookie); tryAgain = true; await Task.Delay(SessionContext.Current.AuthourizeRetryDelay * 1000); } while (tryAgain && i++ < SessionContext.Current.AuthourizeRetryTime); return(response); } catch (Exception ex) { throw new Exception(ex.Message); } }