示例#1
0
        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);
            }
        }