public Dictionary Execute()

in csharp/core/Client.cs [2340:2510]


        public Dictionary<string, object> Execute(Params params_, OpenApiRequest request, AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime)
        {
            params_.Validate();
            request.Validate();
            Dictionary<string, object> runtime_ = new Dictionary<string, object>
            {
                {"timeouted", "retry"},
                {"key", AlibabaCloud.TeaUtil.Common.DefaultString(runtime.Key, _key)},
                {"cert", AlibabaCloud.TeaUtil.Common.DefaultString(runtime.Cert, _cert)},
                {"ca", AlibabaCloud.TeaUtil.Common.DefaultString(runtime.Ca, _ca)},
                {"readTimeout", AlibabaCloud.TeaUtil.Common.DefaultNumber(runtime.ReadTimeout, _readTimeout)},
                {"connectTimeout", AlibabaCloud.TeaUtil.Common.DefaultNumber(runtime.ConnectTimeout, _connectTimeout)},
                {"httpProxy", AlibabaCloud.TeaUtil.Common.DefaultString(runtime.HttpProxy, _httpProxy)},
                {"httpsProxy", AlibabaCloud.TeaUtil.Common.DefaultString(runtime.HttpsProxy, _httpsProxy)},
                {"noProxy", AlibabaCloud.TeaUtil.Common.DefaultString(runtime.NoProxy, _noProxy)},
                {"socks5Proxy", AlibabaCloud.TeaUtil.Common.DefaultString(runtime.Socks5Proxy, _socks5Proxy)},
                {"socks5NetWork", AlibabaCloud.TeaUtil.Common.DefaultString(runtime.Socks5NetWork, _socks5NetWork)},
                {"maxIdleConns", AlibabaCloud.TeaUtil.Common.DefaultNumber(runtime.MaxIdleConns, _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},
                {"disableHttp2", DefaultAny(_disableHttp2, false)},
            };

            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();
                    // spi = new Gateway();//Gateway implements SPI,这一步在产品 SDK 中实例化
                    Dictionary<string, string> headers = GetRpcHeaders();
                    Dictionary<string, string> globalQueries = new Dictionary<string, string>(){};
                    Dictionary<string, string> globalHeaders = new Dictionary<string, string>(){};
                    if (!AlibabaCloud.TeaUtil.Common.IsUnset(_globalParameters))
                    {
                        GlobalParameters globalParams = _globalParameters;
                        if (!AlibabaCloud.TeaUtil.Common.IsUnset(globalParams.Queries))
                        {
                            globalQueries = globalParams.Queries;
                        }
                        if (!AlibabaCloud.TeaUtil.Common.IsUnset(globalParams.Headers))
                        {
                            globalHeaders = globalParams.Headers;
                        }
                    }
                    Dictionary<string, string> extendsHeaders = new Dictionary<string, string>(){};
                    Dictionary<string, string> extendsQueries = new Dictionary<string, string>(){};
                    if (!AlibabaCloud.TeaUtil.Common.IsUnset(runtime.ExtendsParameters))
                    {
                        AlibabaCloud.TeaUtil.Models.ExtendsParameters extendsParameters = runtime.ExtendsParameters;
                        if (!AlibabaCloud.TeaUtil.Common.IsUnset(extendsParameters.Headers))
                        {
                            extendsHeaders = extendsParameters.Headers;
                        }
                        if (!AlibabaCloud.TeaUtil.Common.IsUnset(extendsParameters.Queries))
                        {
                            extendsQueries = extendsParameters.Queries;
                        }
                    }
                    AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextRequest requestContext = new AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextRequest
                    {
                        Headers = TeaConverter.merge<string>
                        (
                            globalHeaders,
                            extendsHeaders,
                            request.Headers,
                            headers
                        ),
                        Query = TeaConverter.merge<string>
                        (
                            globalQueries,
                            extendsQueries,
                            request.Query
                        ),
                        Body = request.Body,
                        Stream = request.Stream,
                        HostMap = request.HostMap,
                        Pathname = params_.Pathname,
                        ProductId = _productId,
                        Action = params_.Action,
                        Version = params_.Version,
                        Protocol = AlibabaCloud.TeaUtil.Common.DefaultString(_protocol, params_.Protocol),
                        Method = AlibabaCloud.TeaUtil.Common.DefaultString(_method, params_.Method),
                        AuthType = params_.AuthType,
                        BodyType = params_.BodyType,
                        ReqBodyType = params_.ReqBodyType,
                        Style = params_.Style,
                        Credential = _credential,
                        SignatureVersion = _signatureVersion,
                        SignatureAlgorithm = _signatureAlgorithm,
                        UserAgent = GetUserAgent(),
                    };
                    AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextConfiguration configurationContext = new AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextConfiguration
                    {
                        RegionId = _regionId,
                        Endpoint = AlibabaCloud.TeaUtil.Common.DefaultString(request.EndpointOverride, _endpoint),
                        EndpointRule = _endpointRule,
                        EndpointMap = _endpointMap,
                        EndpointType = _endpointType,
                        Network = _network,
                        Suffix = _suffix,
                    };
                    AlibabaCloud.GatewaySpi.Models.InterceptorContext interceptorContext = new AlibabaCloud.GatewaySpi.Models.InterceptorContext
                    {
                        Request = requestContext,
                        Configuration = configurationContext,
                    };
                    AlibabaCloud.GatewaySpi.Models.AttributeMap attributeMap = new AlibabaCloud.GatewaySpi.Models.AttributeMap();
                    // 1. spi.modifyConfiguration(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
                    this._spi.ModifyConfiguration(interceptorContext, attributeMap);
                    // 2. spi.modifyRequest(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
                    this._spi.ModifyRequest(interceptorContext, attributeMap);
                    request_.Protocol = interceptorContext.Request.Protocol;
                    request_.Method = interceptorContext.Request.Method;
                    request_.Pathname = interceptorContext.Request.Pathname;
                    request_.Query = interceptorContext.Request.Query;
                    request_.Body = interceptorContext.Request.Stream;
                    request_.Headers = interceptorContext.Request.Headers;
                    _lastRequest = request_;
                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);

                    AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextResponse responseContext = new AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextResponse
                    {
                        StatusCode = response_.StatusCode,
                        Headers = response_.Headers,
                        Body = response_.Body,
                    };
                    interceptorContext.Response = responseContext;
                    // 3. spi.modifyResponse(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
                    this._spi.ModifyResponse(interceptorContext, attributeMap);
                    return new Dictionary<string, object>
                    {
                        {"headers", interceptorContext.Response.Headers},
                        {"statusCode", interceptorContext.Response.StatusCode},
                        {"body", interceptorContext.Response.DeserializedBody},
                    };
                }
                catch (Exception e)
                {
                    if (TeaCore.IsRetryable(e))
                    {
                        _lastException = e;
                        continue;
                    }
                    throw e;
                }
            }

            throw new TeaUnretryableException(_lastRequest, _lastException);
        }