in csharp/core/Client.cs [1730:2021]
public Dictionary<string, object> DoRequest(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},
};
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();
request_.Protocol = AlibabaCloud.TeaUtil.Common.DefaultString(_protocol, params_.Protocol);
request_.Method = params_.Method;
request_.Pathname = params_.Pathname;
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;
}
}
request_.Query = TeaConverter.merge<string>
(
globalQueries,
extendsQueries,
request.Query
);
// endpoint is setted in product client
request_.Headers = TeaConverter.merge<string>
(
new Dictionary<string, string>()
{
{"host", _endpoint},
{"x-acs-version", params_.Version},
{"x-acs-action", params_.Action},
{"user-agent", GetUserAgent()},
{"x-acs-date", AlibabaCloud.OpenApiUtil.Client.GetTimestamp()},
{"x-acs-signature-nonce", AlibabaCloud.TeaUtil.Common.GetNonce()},
{"accept", "application/json"},
},
globalHeaders,
extendsHeaders,
request.Headers
);
if (AlibabaCloud.TeaUtil.Common.EqualString(params_.Style, "RPC"))
{
Dictionary<string, string> headers = GetRpcHeaders();
if (!AlibabaCloud.TeaUtil.Common.IsUnset(headers))
{
request_.Headers = TeaConverter.merge<string>
(
request_.Headers,
headers
);
}
}
string signatureAlgorithm = AlibabaCloud.TeaUtil.Common.DefaultString(_signatureAlgorithm, "ACS3-HMAC-SHA256");
string hashedRequestPayload = AlibabaCloud.OpenApiUtil.Client.HexEncode(AlibabaCloud.OpenApiUtil.Client.Hash(AlibabaCloud.TeaUtil.Common.ToBytes(""), signatureAlgorithm));
if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Stream))
{
byte[] tmp = AlibabaCloud.TeaUtil.Common.ReadAsBytes(request.Stream);
hashedRequestPayload = AlibabaCloud.OpenApiUtil.Client.HexEncode(AlibabaCloud.OpenApiUtil.Client.Hash(tmp, signatureAlgorithm));
request_.Body = TeaCore.BytesReadable(tmp);
request_.Headers["content-type"] = "application/octet-stream";
}
else
{
if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Body))
{
if (AlibabaCloud.TeaUtil.Common.EqualString(params_.ReqBodyType, "byte"))
{
byte[] byteObj = AlibabaCloud.TeaUtil.Common.AssertAsBytes(request.Body);
hashedRequestPayload = AlibabaCloud.OpenApiUtil.Client.HexEncode(AlibabaCloud.OpenApiUtil.Client.Hash(byteObj, signatureAlgorithm));
request_.Body = TeaCore.BytesReadable(byteObj);
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(params_.ReqBodyType, "json"))
{
string jsonObj = AlibabaCloud.TeaUtil.Common.ToJSONString(request.Body);
hashedRequestPayload = AlibabaCloud.OpenApiUtil.Client.HexEncode(AlibabaCloud.OpenApiUtil.Client.Hash(AlibabaCloud.TeaUtil.Common.ToBytes(jsonObj), signatureAlgorithm));
request_.Body = TeaCore.BytesReadable(jsonObj);
request_.Headers["content-type"] = "application/json; charset=utf-8";
}
else
{
Dictionary<string, object> m = AlibabaCloud.TeaUtil.Common.AssertAsMap(request.Body);
string formObj = AlibabaCloud.OpenApiUtil.Client.ToForm(m);
hashedRequestPayload = AlibabaCloud.OpenApiUtil.Client.HexEncode(AlibabaCloud.OpenApiUtil.Client.Hash(AlibabaCloud.TeaUtil.Common.ToBytes(formObj), signatureAlgorithm));
request_.Body = TeaCore.BytesReadable(formObj);
request_.Headers["content-type"] = "application/x-www-form-urlencoded";
}
}
}
request_.Headers["x-acs-content-sha256"] = hashedRequestPayload;
if (!AlibabaCloud.TeaUtil.Common.EqualString(params_.AuthType, "Anonymous"))
{
if (AlibabaCloud.TeaUtil.Common.IsUnset(_credential))
{
throw new TeaException(new Dictionary<string, string>
{
{"code", "InvalidCredentials"},
{"message", "Please set up the credentials correctly. If you are setting them through environment variables, please ensure that ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set correctly. See https://help.aliyun.com/zh/sdk/developer-reference/configure-the-alibaba-cloud-accesskey-environment-variable-on-linux-macos-and-windows-systems for more details."},
});
}
Aliyun.Credentials.Models.CredentialModel credentialModel = this._credential.GetCredential();
string authType = credentialModel.Type;
if (AlibabaCloud.TeaUtil.Common.EqualString(authType, "bearer"))
{
string bearerToken = credentialModel.BearerToken;
request_.Headers["x-acs-bearer-token"] = bearerToken;
if (AlibabaCloud.TeaUtil.Common.EqualString(params_.Style, "RPC"))
{
request_.Query["SignatureType"] = "BEARERTOKEN";
}
else
{
request_.Headers["x-acs-signature-type"] = "BEARERTOKEN";
}
}
else
{
string accessKeyId = credentialModel.AccessKeyId;
string accessKeySecret = credentialModel.AccessKeySecret;
string securityToken = credentialModel.SecurityToken;
if (!AlibabaCloud.TeaUtil.Common.Empty(securityToken))
{
request_.Headers["x-acs-accesskey-id"] = accessKeyId;
request_.Headers["x-acs-security-token"] = securityToken;
}
request_.Headers["Authorization"] = AlibabaCloud.OpenApiUtil.Client.GetAuthorization(request_, signatureAlgorithm, hashedRequestPayload, accessKeyId, accessKeySecret);
}
}
_lastRequest = request_;
TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
if (AlibabaCloud.TeaUtil.Common.Is4xx(response_.StatusCode) || AlibabaCloud.TeaUtil.Common.Is5xx(response_.StatusCode))
{
Dictionary<string, object> err = new Dictionary<string, object>(){};
if (!AlibabaCloud.TeaUtil.Common.IsUnset(response_.Headers.Get("content-type")) && AlibabaCloud.TeaUtil.Common.EqualString(response_.Headers.Get("content-type"), "text/xml;charset=utf-8"))
{
string _str = AlibabaCloud.TeaUtil.Common.ReadAsString(response_.Body);
Dictionary<string, object> respMap = AlibabaCloud.TeaXML.Client.ParseXml(_str, null);
err = AlibabaCloud.TeaUtil.Common.AssertAsMap(respMap.Get("Error"));
}
else
{
object _res = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response_.Body);
err = AlibabaCloud.TeaUtil.Common.AssertAsMap(_res);
}
err["statusCode"] = response_.StatusCode;
throw new TeaException(new Dictionary<string, object>
{
{"code", "" + DefaultAny(err.Get("Code"), err.Get("code"))},
{"message", "code: " + response_.StatusCode + ", " + DefaultAny(err.Get("Message"), err.Get("message")) + " request id: " + DefaultAny(err.Get("RequestId"), err.Get("requestId"))},
{"data", err},
{"description", "" + DefaultAny(err.Get("Description"), err.Get("description"))},
{"accessDeniedDetail", DefaultAny(err.Get("AccessDeniedDetail"), err.Get("accessDeniedDetail"))},
});
}
if (AlibabaCloud.TeaUtil.Common.EqualString(params_.BodyType, "binary"))
{
Dictionary<string, object> resp = new Dictionary<string, object>
{
{"body", response_.Body},
{"headers", response_.Headers},
{"statusCode", response_.StatusCode},
};
return resp;
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(params_.BodyType, "byte"))
{
byte[] byt = AlibabaCloud.TeaUtil.Common.ReadAsBytes(response_.Body);
return new Dictionary<string, object>
{
{"body", byt},
{"headers", response_.Headers},
{"statusCode", response_.StatusCode},
};
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(params_.BodyType, "string"))
{
string str = AlibabaCloud.TeaUtil.Common.ReadAsString(response_.Body);
return new Dictionary<string, object>
{
{"body", str},
{"headers", response_.Headers},
{"statusCode", response_.StatusCode},
};
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(params_.BodyType, "json"))
{
object obj = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response_.Body);
Dictionary<string, object> res = AlibabaCloud.TeaUtil.Common.AssertAsMap(obj);
return new Dictionary<string, object>
{
{"body", res},
{"headers", response_.Headers},
{"statusCode", response_.StatusCode},
};
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(params_.BodyType, "array"))
{
object arr = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response_.Body);
return new Dictionary<string, object>
{
{"body", arr},
{"headers", response_.Headers},
{"statusCode", response_.StatusCode},
};
}
else
{
string anything = AlibabaCloud.TeaUtil.Common.ReadAsString(response_.Body);
return new Dictionary<string, object>
{
{"body", anything},
{"headers", response_.Headers},
{"statusCode", response_.StatusCode},
};
}
}
catch (Exception e)
{
if (TeaCore.IsRetryable(e))
{
_lastException = e;
continue;
}
throw e;
}
}
throw new TeaUnretryableException(_lastRequest, _lastException);
}