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); }
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)); }
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); }
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))); }