Пример #1
0
        protected T ExecuteRESTRequest <T>(CloudIdentity identity, string urlPath, HttpMethod method, object body, Dictionary <string, string> queryStringParameter, bool isRetry, bool isTokenRequest, string token, int retryCount, int retryDelay,
                                           Func <Uri, HttpMethod, string, Dictionary <string, string>, Dictionary <string, string>, JsonRequestSettings, T> callback) where T : Response
        {
            if (identity == null)
            {
                identity = _defaultIdentity;
            }

            var url = new Uri(_urlBase, urlPath);

            var headers = new Dictionary <string, string>();

            if (!isTokenRequest)
            {
                headers.Add("X-Auth-Token", string.IsNullOrWhiteSpace(token) ? GetToken(identity) : token);
            }

            string bodyStr = null;

            if (body != null)
            {
                if (body is JObject)
                {
                    bodyStr = body.ToString();
                }
                else
                {
                    bodyStr = JsonConvert.SerializeObject(body, new JsonSerializerSettings {
                        NullValueHandling = NullValueHandling.Ignore
                    });
                }
            }

            var settings = new JsonRequestSettings()
            {
                RetryCount         = retryCount,
                RetryDelayInMS     = retryDelay,
                Non200SuccessCodes = new[] { 401, 409 },
                UserAgent          = UserAgentGenerator.Generate()
            };

            var response = callback(url, method, bodyStr, headers, queryStringParameter, settings);

            // on errors try again 1 time.
            if (response.StatusCode == 401 && !isRetry && !isTokenRequest)
            {
                return(ExecuteRESTRequest <T>(identity, urlPath, method, body, queryStringParameter, true, isTokenRequest, GetToken(identity), retryCount, retryCount, callback));
            }

            _responseCodeValidator.Validate(response);

            return(response);
        }
Пример #2
0
 protected Response ExecuteRESTRequest(CloudIdentity identity, Uri absoluteUri, HttpMethod method, Func <HttpWebResponse, bool, Response> buildResponseCallback, object body = null, Dictionary <string, string> queryStringParameter = null, Dictionary <string, string> headers = null, bool isRetry = false, JsonRequestSettings settings = null)
 {
     return(ExecuteRESTRequest <Response>(identity, absoluteUri, method, body, queryStringParameter, headers, isRetry, settings, RestService.Execute));
 }
Пример #3
0
        private T ExecuteRESTRequest <T>(CloudIdentity identity, Uri absoluteUri, HttpMethod method, object body, Dictionary <string, string> queryStringParameter, Dictionary <string, string> headers, bool isRetry, JsonRequestSettings requestSettings,
                                         Func <Uri, HttpMethod, string, Dictionary <string, string>, Dictionary <string, string>, JsonRequestSettings, T> callback) where T : Response
        {
            identity = GetDefaultIdentity(identity);

            if (requestSettings == null)
            {
                requestSettings = BuildDefaultRequestSettings();
            }

            if (headers == null)
            {
                headers = new Dictionary <string, string>();
            }

            headers["X-Auth-Token"] = IdentityProvider.GetToken(identity, isRetry);

            string bodyStr = null;

            if (body != null)
            {
                if (body is JObject)
                {
                    bodyStr = body.ToString();
                }
                else if (body is string)
                {
                    bodyStr = body as string;
                }
                else
                {
                    bodyStr = JsonConvert.SerializeObject(body, new JsonSerializerSettings {
                        NullValueHandling = NullValueHandling.Ignore
                    });
                }
            }

            if (string.IsNullOrWhiteSpace(requestSettings.UserAgent))
            {
                requestSettings.UserAgent = GetUserAgentHeaderValue();
            }

            var response = callback(absoluteUri, method, bodyStr, headers, queryStringParameter, requestSettings);

            // on errors try again 1 time.
            if (response.StatusCode == HttpStatusCode.Unauthorized)
            {
                if (!isRetry)
                {
                    return(ExecuteRESTRequest <T>(identity, absoluteUri, method, body, queryStringParameter, headers, true, requestSettings, callback));
                }
            }

            CheckResponse(response);

            return(response);
        }
Пример #4
0
 protected Response ExecuteRESTRequest(CloudIdentity identity, Uri absoluteUri, HttpMethod method, object body = null, Dictionary <string, string> queryStringParameter = null, Dictionary <string, string> headers = null, bool isRetry = false, JsonRequestSettings settings = null)
 {
     return(ExecuteRESTRequest <Response>(identity, absoluteUri, method, body, queryStringParameter, headers, isRetry, settings,
                                          (uri, requestMethod, requestBody, requestHeaders, requestQueryParams, requestSettings) => RestService.Execute(uri, requestMethod, requestBody, requestHeaders, requestQueryParams, requestSettings)));
 }