public Dictionary _request()

in csharp/core/Client.cs [50:162]


        public Dictionary<string, object> _request(string method, string pathname, Dictionary<string, object> query, Dictionary<string, string> headers, object body, AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime)
        {
            Dictionary<string, object> runtime_ = new Dictionary<string, object>
            {
                {"timeouted", "retry"},
                {"readTimeout", runtime.ReadTimeout},
                {"connectTimeout", runtime.ConnectTimeout},
                {"httpProxy", runtime.HttpProxy},
                {"httpsProxy", runtime.HttpsProxy},
                {"noProxy", runtime.NoProxy},
                {"maxIdleConns", runtime.MaxIdleConns},
                {"retry", new Dictionary<string, object>
                    {
                        {"retryable", runtime.Autoretry},
                        {"maxAttempts", AlibabaCloud.TeaUtil.Common.DefaultNumber(runtime.MaxAttempts, 3)},
                    }
                },
                {"backoff", new Dictionary<string, object>
                    {
                        {"policy", AlibabaCloud.TeaUtil.Common.DefaultString(runtime.BackoffPolicy, "no")},
                        {"period", AlibabaCloud.TeaUtil.Common.DefaultNumber(runtime.BackoffPeriod, 1)},
                    }
                },
                {"ignoreSSL", runtime.IgnoreSSL},
            };

            TeaRequest _lastRequest = null;
            Exception _lastException = null;
            long _now = System.DateTime.Now.Millisecond;
            int _retryTimes = 0;
            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
            {
                if (_retryTimes > 0)
                {
                    int backoffTime = TeaCore.GetBackoffTime((IDictionary) runtime_["backoff"], _retryTimes);
                    if (backoffTime > 0)
                    {
                        TeaCore.Sleep(backoffTime);
                    }
                }
                _retryTimes = _retryTimes + 1;
                try
                {
                    TeaRequest request_ = new TeaRequest();
                    string accesskeyId = GetAccessKeyId();
                    string accessKeySecret = GetAccessKeySecret();
                    string securityToken = GetSecurityToken();
                    request_.Protocol = AlibabaCloud.TeaUtil.Common.DefaultString(_protocol, "HTTP");
                    request_.Method = method;
                    request_.Pathname = pathname;
                    request_.Headers = TeaConverter.merge<string>
                    (
                        new Dictionary<string, string>()
                        {
                            {"user-agent", GetUserAgent()},
                            {"Date", AlibabaCloud.OpenSearchUtil.Common.GetDate()},
                            {"host", AlibabaCloud.TeaUtil.Common.DefaultString(_endpoint, "opensearch-cn-hangzhou.aliyuncs.com")},
                            {"X-Opensearch-Nonce", AlibabaCloud.TeaUtil.Common.GetNonce()},
                        },
                        headers
                    );
                    if (!AlibabaCloud.TeaUtil.Common.IsUnset(query))
                    {
                        request_.Query = AlibabaCloud.TeaUtil.Common.StringifyMapValue(query);
                    }
                    if (!AlibabaCloud.TeaUtil.Common.IsUnset(body))
                    {
                        string reqBody = AlibabaCloud.TeaUtil.Common.ToJSONString(body);
                        request_.Headers["Content-MD5"] = AlibabaCloud.OpenSearchUtil.Common.GetContentMD5(reqBody);
                        request_.Headers["Content-Type"] = "application/json";
                        request_.Body = TeaCore.BytesReadable(reqBody);
                    }
                    // 增加对 STS 鉴权支持.
                    if (!AlibabaCloud.TeaUtil.Common.IsUnset(securityToken))
                    {
                        request_.Headers["X-Opensearch-Security-Token"] = securityToken;
                    }
                    request_.Headers["Authorization"] = AlibabaCloud.OpenSearchUtil.Common.GetSignature(request_, accesskeyId, accessKeySecret);
                    _lastRequest = request_;
                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);

                    string objStr = AlibabaCloud.TeaUtil.Common.ReadAsString(response_.Body);
                    object obj = AlibabaCloud.TeaUtil.Common.ParseJSON(objStr);
                    Dictionary<string, object> res = AlibabaCloud.TeaUtil.Common.AssertAsMap(obj);
                    if (AlibabaCloud.TeaUtil.Common.Is4xx(response_.StatusCode) || AlibabaCloud.TeaUtil.Common.Is5xx(response_.StatusCode))
                    {
                        throw new TeaException(new Dictionary<string, object>
                            {
                                {"message", response_.StatusMessage},
                                {"data", res},
                                {"code", response_.StatusCode}
                            }
                        );
                    }
                    return new Dictionary<string, object>
                    {
                        {"body", res},
                        {"headers", response_.Headers}
                    };
                }
                catch (Exception e)
                {
                    if (TeaCore.IsRetryable(e))
                    {
                        _lastException = e;
                        continue;
                    }
                    throw e;
                }
            }

            throw new TeaUnretryableException(_lastRequest, _lastException);
        }