csharp/core/Client.cs (2,692 lines of code) (raw):
// This file is auto-generated, don't edit it. Thanks.
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Tea;
using Tea.Utils;
using AlibabaCloud.OpenApiClient.Models;
namespace AlibabaCloud.OpenApiClient
{
public class Client
{
protected string _endpoint;
protected string _regionId;
protected string _protocol;
protected string _method;
protected string _userAgent;
protected string _endpointRule;
protected Dictionary<string, string> _endpointMap;
protected string _suffix;
protected int? _readTimeout;
protected int? _connectTimeout;
protected string _httpProxy;
protected string _httpsProxy;
protected string _socks5Proxy;
protected string _socks5NetWork;
protected string _noProxy;
protected string _network;
protected string _productId;
protected int? _maxIdleConns;
protected string _endpointType;
protected string _openPlatformEndpoint;
protected Aliyun.Credentials.Client _credential;
protected string _signatureVersion;
protected string _signatureAlgorithm;
protected Dictionary<string, string> _headers;
protected AlibabaCloud.GatewaySpi.Client _spi;
protected GlobalParameters _globalParameters;
protected string _key;
protected string _cert;
protected string _ca;
protected bool? _disableHttp2;
/**
* Init client with Config
* @param config config contains the necessary information to create a client
*/
public Client(Config config)
{
if (AlibabaCloud.TeaUtil.Common.IsUnset(config))
{
throw new TeaException(new Dictionary<string, string>
{
{"code", "ParameterMissing"},
{"message", "'config' can not be unset"},
});
}
if (!AlibabaCloud.TeaUtil.Common.Empty(config.AccessKeyId) && !AlibabaCloud.TeaUtil.Common.Empty(config.AccessKeySecret))
{
if (!AlibabaCloud.TeaUtil.Common.Empty(config.SecurityToken))
{
config.Type = "sts";
}
else
{
config.Type = "access_key";
}
Aliyun.Credentials.Models.Config credentialConfig = new Aliyun.Credentials.Models.Config
{
AccessKeyId = config.AccessKeyId,
Type = config.Type,
AccessKeySecret = config.AccessKeySecret,
};
credentialConfig.SecurityToken = config.SecurityToken;
this._credential = new Aliyun.Credentials.Client(credentialConfig);
}
else if (!AlibabaCloud.TeaUtil.Common.Empty(config.BearerToken))
{
Aliyun.Credentials.Models.Config cc = new Aliyun.Credentials.Models.Config
{
Type = "bearer",
BearerToken = config.BearerToken,
};
this._credential = new Aliyun.Credentials.Client(cc);
}
else if (!AlibabaCloud.TeaUtil.Common.IsUnset(config.Credential))
{
this._credential = config.Credential;
}
this._endpoint = config.Endpoint;
this._endpointType = config.EndpointType;
this._network = config.Network;
this._suffix = config.Suffix;
this._protocol = config.Protocol;
this._method = config.Method;
this._regionId = config.RegionId;
this._userAgent = config.UserAgent;
this._readTimeout = config.ReadTimeout;
this._connectTimeout = config.ConnectTimeout;
this._httpProxy = config.HttpProxy;
this._httpsProxy = config.HttpsProxy;
this._noProxy = config.NoProxy;
this._socks5Proxy = config.Socks5Proxy;
this._socks5NetWork = config.Socks5NetWork;
this._maxIdleConns = config.MaxIdleConns;
this._signatureVersion = config.SignatureVersion;
this._signatureAlgorithm = config.SignatureAlgorithm;
this._globalParameters = config.GlobalParameters;
this._key = config.Key;
this._cert = config.Cert;
this._ca = config.Ca;
this._disableHttp2 = config.DisableHttp2;
}
/**
* Encapsulate the request and invoke the network
* @param action api name
* @param version product version
* @param protocol http or https
* @param method e.g. GET
* @param authType authorization type e.g. AK
* @param bodyType response body type e.g. String
* @param request object of OpenApiRequest
* @param runtime which controls some details of call api, such as retry times
* @return the response
*/
public Dictionary<string, object> DoRPCRequest(string action, string version, string protocol, string method, string authType, string bodyType, OpenApiRequest request, AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime)
{
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, protocol);
request_.Method = method;
request_.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>
(
new Dictionary<string, string>()
{
{"Action", action},
{"Format", "json"},
{"Version", version},
{"Timestamp", AlibabaCloud.OpenApiUtil.Client.GetTimestamp()},
{"SignatureNonce", AlibabaCloud.TeaUtil.Common.GetNonce()},
},
globalQueries,
extendsQueries,
request.Query
);
Dictionary<string, string> headers = GetRpcHeaders();
if (AlibabaCloud.TeaUtil.Common.IsUnset(headers))
{
// endpoint is setted in product client
request_.Headers = TeaConverter.merge<string>
(
new Dictionary<string, string>()
{
{"host", _endpoint},
{"x-acs-version", version},
{"x-acs-action", action},
{"user-agent", GetUserAgent()},
},
globalHeaders,
extendsHeaders
);
}
else
{
request_.Headers = TeaConverter.merge<string>
(
new Dictionary<string, string>()
{
{"host", _endpoint},
{"x-acs-version", version},
{"x-acs-action", action},
{"user-agent", GetUserAgent()},
},
globalHeaders,
extendsHeaders,
headers
);
}
if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Body))
{
Dictionary<string, object> m = AlibabaCloud.TeaUtil.Common.AssertAsMap(request.Body);
Dictionary<string, object> tmp = AlibabaCloud.TeaUtil.Common.AnyifyMapValue(AlibabaCloud.OpenApiUtil.Client.Query(m));
request_.Body = TeaCore.BytesReadable(AlibabaCloud.TeaUtil.Common.ToFormString(tmp));
request_.Headers["content-type"] = "application/x-www-form-urlencoded";
}
if (!AlibabaCloud.TeaUtil.Common.EqualString(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 credentialType = credentialModel.Type;
if (AlibabaCloud.TeaUtil.Common.EqualString(credentialType, "bearer"))
{
string bearerToken = credentialModel.BearerToken;
request_.Query["BearerToken"] = bearerToken;
request_.Query["SignatureType"] = "BEARERTOKEN";
}
else
{
string accessKeyId = credentialModel.AccessKeyId;
string accessKeySecret = credentialModel.AccessKeySecret;
string securityToken = credentialModel.SecurityToken;
if (!AlibabaCloud.TeaUtil.Common.Empty(securityToken))
{
request_.Query["SecurityToken"] = securityToken;
}
request_.Query["SignatureMethod"] = "HMAC-SHA1";
request_.Query["SignatureVersion"] = "1.0";
request_.Query["AccessKeyId"] = accessKeyId;
Dictionary<string, object> t = null;
if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Body))
{
t = AlibabaCloud.TeaUtil.Common.AssertAsMap(request.Body);
}
Dictionary<string, string> signedParam = TeaConverter.merge<string>
(
request_.Query,
AlibabaCloud.OpenApiUtil.Client.Query(t)
);
request_.Query["Signature"] = AlibabaCloud.OpenApiUtil.Client.GetRPCSignature(signedParam, request_.Method, accessKeySecret);
}
}
_lastRequest = request_;
TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
if (AlibabaCloud.TeaUtil.Common.Is4xx(response_.StatusCode) || AlibabaCloud.TeaUtil.Common.Is5xx(response_.StatusCode))
{
object _res = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response_.Body);
Dictionary<string, object> err = AlibabaCloud.TeaUtil.Common.AssertAsMap(_res);
object requestId = DefaultAny(err.Get("RequestId"), err.Get("requestId"));
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: " + requestId},
{"data", err},
{"description", "" + DefaultAny(err.Get("Description"), err.Get("description"))},
{"accessDeniedDetail", DefaultAny(err.Get("AccessDeniedDetail"), err.Get("accessDeniedDetail"))},
});
}
if (AlibabaCloud.TeaUtil.Common.EqualString(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(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(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(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(bodyType, "array"))
{
object arr = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response_.Body);
return new Dictionary<string, object>
{
{"body", arr},
{"headers", response_.Headers},
{"statusCode", response_.StatusCode},
};
}
else
{
return new Dictionary<string, object>
{
{"headers", response_.Headers},
{"statusCode", response_.StatusCode},
};
}
}
catch (Exception e)
{
if (TeaCore.IsRetryable(e))
{
_lastException = e;
continue;
}
throw e;
}
}
throw new TeaUnretryableException(_lastRequest, _lastException);
}
/**
* Encapsulate the request and invoke the network
* @param action api name
* @param version product version
* @param protocol http or https
* @param method e.g. GET
* @param authType authorization type e.g. AK
* @param bodyType response body type e.g. String
* @param request object of OpenApiRequest
* @param runtime which controls some details of call api, such as retry times
* @return the response
*/
public async Task<Dictionary<string, object>> DoRPCRequestAsync(string action, string version, string protocol, string method, string authType, string bodyType, OpenApiRequest request, AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime)
{
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, protocol);
request_.Method = method;
request_.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>
(
new Dictionary<string, string>()
{
{"Action", action},
{"Format", "json"},
{"Version", version},
{"Timestamp", AlibabaCloud.OpenApiUtil.Client.GetTimestamp()},
{"SignatureNonce", AlibabaCloud.TeaUtil.Common.GetNonce()},
},
globalQueries,
extendsQueries,
request.Query
);
Dictionary<string, string> headers = GetRpcHeaders();
if (AlibabaCloud.TeaUtil.Common.IsUnset(headers))
{
// endpoint is setted in product client
request_.Headers = TeaConverter.merge<string>
(
new Dictionary<string, string>()
{
{"host", _endpoint},
{"x-acs-version", version},
{"x-acs-action", action},
{"user-agent", GetUserAgent()},
},
globalHeaders,
extendsHeaders
);
}
else
{
request_.Headers = TeaConverter.merge<string>
(
new Dictionary<string, string>()
{
{"host", _endpoint},
{"x-acs-version", version},
{"x-acs-action", action},
{"user-agent", GetUserAgent()},
},
globalHeaders,
extendsHeaders,
headers
);
}
if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Body))
{
Dictionary<string, object> m = AlibabaCloud.TeaUtil.Common.AssertAsMap(request.Body);
Dictionary<string, object> tmp = AlibabaCloud.TeaUtil.Common.AnyifyMapValue(AlibabaCloud.OpenApiUtil.Client.Query(m));
request_.Body = TeaCore.BytesReadable(AlibabaCloud.TeaUtil.Common.ToFormString(tmp));
request_.Headers["content-type"] = "application/x-www-form-urlencoded";
}
if (!AlibabaCloud.TeaUtil.Common.EqualString(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 = await this._credential.GetCredentialAsync();
string credentialType = credentialModel.Type;
if (AlibabaCloud.TeaUtil.Common.EqualString(credentialType, "bearer"))
{
string bearerToken = credentialModel.BearerToken;
request_.Query["BearerToken"] = bearerToken;
request_.Query["SignatureType"] = "BEARERTOKEN";
}
else
{
string accessKeyId = credentialModel.AccessKeyId;
string accessKeySecret = credentialModel.AccessKeySecret;
string securityToken = credentialModel.SecurityToken;
if (!AlibabaCloud.TeaUtil.Common.Empty(securityToken))
{
request_.Query["SecurityToken"] = securityToken;
}
request_.Query["SignatureMethod"] = "HMAC-SHA1";
request_.Query["SignatureVersion"] = "1.0";
request_.Query["AccessKeyId"] = accessKeyId;
Dictionary<string, object> t = null;
if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Body))
{
t = AlibabaCloud.TeaUtil.Common.AssertAsMap(request.Body);
}
Dictionary<string, string> signedParam = TeaConverter.merge<string>
(
request_.Query,
AlibabaCloud.OpenApiUtil.Client.Query(t)
);
request_.Query["Signature"] = AlibabaCloud.OpenApiUtil.Client.GetRPCSignature(signedParam, request_.Method, accessKeySecret);
}
}
_lastRequest = request_;
TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
if (AlibabaCloud.TeaUtil.Common.Is4xx(response_.StatusCode) || AlibabaCloud.TeaUtil.Common.Is5xx(response_.StatusCode))
{
object _res = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response_.Body);
Dictionary<string, object> err = AlibabaCloud.TeaUtil.Common.AssertAsMap(_res);
object requestId = DefaultAny(err.Get("RequestId"), err.Get("requestId"));
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: " + requestId},
{"data", err},
{"description", "" + DefaultAny(err.Get("Description"), err.Get("description"))},
{"accessDeniedDetail", DefaultAny(err.Get("AccessDeniedDetail"), err.Get("accessDeniedDetail"))},
});
}
if (AlibabaCloud.TeaUtil.Common.EqualString(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(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(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(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(bodyType, "array"))
{
object arr = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response_.Body);
return new Dictionary<string, object>
{
{"body", arr},
{"headers", response_.Headers},
{"statusCode", response_.StatusCode},
};
}
else
{
return new Dictionary<string, object>
{
{"headers", response_.Headers},
{"statusCode", response_.StatusCode},
};
}
}
catch (Exception e)
{
if (TeaCore.IsRetryable(e))
{
_lastException = e;
continue;
}
throw e;
}
}
throw new TeaUnretryableException(_lastRequest, _lastException);
}
/**
* Encapsulate the request and invoke the network
* @param action api name
* @param version product version
* @param protocol http or https
* @param method e.g. GET
* @param authType authorization type e.g. AK
* @param pathname pathname of every api
* @param bodyType response body type e.g. String
* @param request object of OpenApiRequest
* @param runtime which controls some details of call api, such as retry times
* @return the response
*/
public Dictionary<string, object> DoROARequest(string action, string version, string protocol, string method, string authType, string pathname, string bodyType, OpenApiRequest request, AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime)
{
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, protocol);
request_.Method = method;
request_.Pathname = 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_.Headers = TeaConverter.merge<string>
(
new Dictionary<string, string>()
{
{"date", AlibabaCloud.TeaUtil.Common.GetDateUTCString()},
{"host", _endpoint},
{"accept", "application/json"},
{"x-acs-signature-nonce", AlibabaCloud.TeaUtil.Common.GetNonce()},
{"x-acs-signature-method", "HMAC-SHA1"},
{"x-acs-signature-version", "1.0"},
{"x-acs-version", version},
{"x-acs-action", action},
{"user-agent", AlibabaCloud.TeaUtil.Common.GetUserAgent(_userAgent)},
},
globalHeaders,
extendsHeaders,
request.Headers
);
if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Body))
{
request_.Body = TeaCore.BytesReadable(AlibabaCloud.TeaUtil.Common.ToJSONString(request.Body));
request_.Headers["content-type"] = "application/json; charset=utf-8";
}
request_.Query = TeaConverter.merge<string>
(
globalQueries,
extendsQueries
);
if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Query))
{
request_.Query = TeaConverter.merge<string>
(
request_.Query,
request.Query
);
}
if (!AlibabaCloud.TeaUtil.Common.EqualString(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 credentialType = credentialModel.Type;
if (AlibabaCloud.TeaUtil.Common.EqualString(credentialType, "bearer"))
{
string bearerToken = credentialModel.BearerToken;
request_.Headers["x-acs-bearer-token"] = bearerToken;
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;
}
string stringToSign = AlibabaCloud.OpenApiUtil.Client.GetStringToSign(request_);
request_.Headers["authorization"] = "acs " + accessKeyId + ":" + AlibabaCloud.OpenApiUtil.Client.GetROASignature(stringToSign, accessKeySecret);
}
}
_lastRequest = request_;
TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
if (AlibabaCloud.TeaUtil.Common.EqualNumber(response_.StatusCode, 204))
{
return new Dictionary<string, object>
{
{"headers", response_.Headers},
};
}
if (AlibabaCloud.TeaUtil.Common.Is4xx(response_.StatusCode) || AlibabaCloud.TeaUtil.Common.Is5xx(response_.StatusCode))
{
object _res = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response_.Body);
Dictionary<string, object> err = AlibabaCloud.TeaUtil.Common.AssertAsMap(_res);
object requestId = DefaultAny(err.Get("RequestId"), err.Get("requestId"));
requestId = DefaultAny(requestId, err.Get("requestid"));
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: " + requestId},
{"data", err},
{"description", "" + DefaultAny(err.Get("Description"), err.Get("description"))},
{"accessDeniedDetail", DefaultAny(err.Get("AccessDeniedDetail"), err.Get("accessDeniedDetail"))},
});
}
if (AlibabaCloud.TeaUtil.Common.EqualString(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(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(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(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(bodyType, "array"))
{
object arr = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response_.Body);
return new Dictionary<string, object>
{
{"body", arr},
{"headers", response_.Headers},
{"statusCode", response_.StatusCode},
};
}
else
{
return new Dictionary<string, object>
{
{"headers", response_.Headers},
{"statusCode", response_.StatusCode},
};
}
}
catch (Exception e)
{
if (TeaCore.IsRetryable(e))
{
_lastException = e;
continue;
}
throw e;
}
}
throw new TeaUnretryableException(_lastRequest, _lastException);
}
/**
* Encapsulate the request and invoke the network
* @param action api name
* @param version product version
* @param protocol http or https
* @param method e.g. GET
* @param authType authorization type e.g. AK
* @param pathname pathname of every api
* @param bodyType response body type e.g. String
* @param request object of OpenApiRequest
* @param runtime which controls some details of call api, such as retry times
* @return the response
*/
public async Task<Dictionary<string, object>> DoROARequestAsync(string action, string version, string protocol, string method, string authType, string pathname, string bodyType, OpenApiRequest request, AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime)
{
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, protocol);
request_.Method = method;
request_.Pathname = 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_.Headers = TeaConverter.merge<string>
(
new Dictionary<string, string>()
{
{"date", AlibabaCloud.TeaUtil.Common.GetDateUTCString()},
{"host", _endpoint},
{"accept", "application/json"},
{"x-acs-signature-nonce", AlibabaCloud.TeaUtil.Common.GetNonce()},
{"x-acs-signature-method", "HMAC-SHA1"},
{"x-acs-signature-version", "1.0"},
{"x-acs-version", version},
{"x-acs-action", action},
{"user-agent", AlibabaCloud.TeaUtil.Common.GetUserAgent(_userAgent)},
},
globalHeaders,
extendsHeaders,
request.Headers
);
if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Body))
{
request_.Body = TeaCore.BytesReadable(AlibabaCloud.TeaUtil.Common.ToJSONString(request.Body));
request_.Headers["content-type"] = "application/json; charset=utf-8";
}
request_.Query = TeaConverter.merge<string>
(
globalQueries,
extendsQueries
);
if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Query))
{
request_.Query = TeaConverter.merge<string>
(
request_.Query,
request.Query
);
}
if (!AlibabaCloud.TeaUtil.Common.EqualString(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 = await this._credential.GetCredentialAsync();
string credentialType = credentialModel.Type;
if (AlibabaCloud.TeaUtil.Common.EqualString(credentialType, "bearer"))
{
string bearerToken = credentialModel.BearerToken;
request_.Headers["x-acs-bearer-token"] = bearerToken;
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;
}
string stringToSign = AlibabaCloud.OpenApiUtil.Client.GetStringToSign(request_);
request_.Headers["authorization"] = "acs " + accessKeyId + ":" + AlibabaCloud.OpenApiUtil.Client.GetROASignature(stringToSign, accessKeySecret);
}
}
_lastRequest = request_;
TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
if (AlibabaCloud.TeaUtil.Common.EqualNumber(response_.StatusCode, 204))
{
return new Dictionary<string, object>
{
{"headers", response_.Headers},
};
}
if (AlibabaCloud.TeaUtil.Common.Is4xx(response_.StatusCode) || AlibabaCloud.TeaUtil.Common.Is5xx(response_.StatusCode))
{
object _res = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response_.Body);
Dictionary<string, object> err = AlibabaCloud.TeaUtil.Common.AssertAsMap(_res);
object requestId = DefaultAny(err.Get("RequestId"), err.Get("requestId"));
requestId = DefaultAny(requestId, err.Get("requestid"));
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: " + requestId},
{"data", err},
{"description", "" + DefaultAny(err.Get("Description"), err.Get("description"))},
{"accessDeniedDetail", DefaultAny(err.Get("AccessDeniedDetail"), err.Get("accessDeniedDetail"))},
});
}
if (AlibabaCloud.TeaUtil.Common.EqualString(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(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(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(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(bodyType, "array"))
{
object arr = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response_.Body);
return new Dictionary<string, object>
{
{"body", arr},
{"headers", response_.Headers},
{"statusCode", response_.StatusCode},
};
}
else
{
return new Dictionary<string, object>
{
{"headers", response_.Headers},
{"statusCode", response_.StatusCode},
};
}
}
catch (Exception e)
{
if (TeaCore.IsRetryable(e))
{
_lastException = e;
continue;
}
throw e;
}
}
throw new TeaUnretryableException(_lastRequest, _lastException);
}
/**
* Encapsulate the request and invoke the network with form body
* @param action api name
* @param version product version
* @param protocol http or https
* @param method e.g. GET
* @param authType authorization type e.g. AK
* @param pathname pathname of every api
* @param bodyType response body type e.g. String
* @param request object of OpenApiRequest
* @param runtime which controls some details of call api, such as retry times
* @return the response
*/
public Dictionary<string, object> DoROARequestWithForm(string action, string version, string protocol, string method, string authType, string pathname, string bodyType, OpenApiRequest request, AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime)
{
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, protocol);
request_.Method = method;
request_.Pathname = 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_.Headers = TeaConverter.merge<string>
(
new Dictionary<string, string>()
{
{"date", AlibabaCloud.TeaUtil.Common.GetDateUTCString()},
{"host", _endpoint},
{"accept", "application/json"},
{"x-acs-signature-nonce", AlibabaCloud.TeaUtil.Common.GetNonce()},
{"x-acs-signature-method", "HMAC-SHA1"},
{"x-acs-signature-version", "1.0"},
{"x-acs-version", version},
{"x-acs-action", action},
{"user-agent", AlibabaCloud.TeaUtil.Common.GetUserAgent(_userAgent)},
},
globalHeaders,
extendsHeaders,
request.Headers
);
if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Body))
{
Dictionary<string, object> m = AlibabaCloud.TeaUtil.Common.AssertAsMap(request.Body);
request_.Body = TeaCore.BytesReadable(AlibabaCloud.OpenApiUtil.Client.ToForm(m));
request_.Headers["content-type"] = "application/x-www-form-urlencoded";
}
request_.Query = TeaConverter.merge<string>
(
globalQueries,
extendsQueries
);
if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Query))
{
request_.Query = TeaConverter.merge<string>
(
request_.Query,
request.Query
);
}
if (!AlibabaCloud.TeaUtil.Common.EqualString(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 credentialType = credentialModel.Type;
if (AlibabaCloud.TeaUtil.Common.EqualString(credentialType, "bearer"))
{
string bearerToken = credentialModel.BearerToken;
request_.Headers["x-acs-bearer-token"] = bearerToken;
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;
}
string stringToSign = AlibabaCloud.OpenApiUtil.Client.GetStringToSign(request_);
request_.Headers["authorization"] = "acs " + accessKeyId + ":" + AlibabaCloud.OpenApiUtil.Client.GetROASignature(stringToSign, accessKeySecret);
}
}
_lastRequest = request_;
TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
if (AlibabaCloud.TeaUtil.Common.EqualNumber(response_.StatusCode, 204))
{
return new Dictionary<string, object>
{
{"headers", response_.Headers},
};
}
if (AlibabaCloud.TeaUtil.Common.Is4xx(response_.StatusCode) || AlibabaCloud.TeaUtil.Common.Is5xx(response_.StatusCode))
{
object _res = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response_.Body);
Dictionary<string, object> 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(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(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(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(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(bodyType, "array"))
{
object arr = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response_.Body);
return new Dictionary<string, object>
{
{"body", arr},
{"headers", response_.Headers},
{"statusCode", response_.StatusCode},
};
}
else
{
return new Dictionary<string, object>
{
{"headers", response_.Headers},
{"statusCode", response_.StatusCode},
};
}
}
catch (Exception e)
{
if (TeaCore.IsRetryable(e))
{
_lastException = e;
continue;
}
throw e;
}
}
throw new TeaUnretryableException(_lastRequest, _lastException);
}
/**
* Encapsulate the request and invoke the network with form body
* @param action api name
* @param version product version
* @param protocol http or https
* @param method e.g. GET
* @param authType authorization type e.g. AK
* @param pathname pathname of every api
* @param bodyType response body type e.g. String
* @param request object of OpenApiRequest
* @param runtime which controls some details of call api, such as retry times
* @return the response
*/
public async Task<Dictionary<string, object>> DoROARequestWithFormAsync(string action, string version, string protocol, string method, string authType, string pathname, string bodyType, OpenApiRequest request, AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime)
{
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, protocol);
request_.Method = method;
request_.Pathname = 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_.Headers = TeaConverter.merge<string>
(
new Dictionary<string, string>()
{
{"date", AlibabaCloud.TeaUtil.Common.GetDateUTCString()},
{"host", _endpoint},
{"accept", "application/json"},
{"x-acs-signature-nonce", AlibabaCloud.TeaUtil.Common.GetNonce()},
{"x-acs-signature-method", "HMAC-SHA1"},
{"x-acs-signature-version", "1.0"},
{"x-acs-version", version},
{"x-acs-action", action},
{"user-agent", AlibabaCloud.TeaUtil.Common.GetUserAgent(_userAgent)},
},
globalHeaders,
extendsHeaders,
request.Headers
);
if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Body))
{
Dictionary<string, object> m = AlibabaCloud.TeaUtil.Common.AssertAsMap(request.Body);
request_.Body = TeaCore.BytesReadable(AlibabaCloud.OpenApiUtil.Client.ToForm(m));
request_.Headers["content-type"] = "application/x-www-form-urlencoded";
}
request_.Query = TeaConverter.merge<string>
(
globalQueries,
extendsQueries
);
if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Query))
{
request_.Query = TeaConverter.merge<string>
(
request_.Query,
request.Query
);
}
if (!AlibabaCloud.TeaUtil.Common.EqualString(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 = await this._credential.GetCredentialAsync();
string credentialType = credentialModel.Type;
if (AlibabaCloud.TeaUtil.Common.EqualString(credentialType, "bearer"))
{
string bearerToken = credentialModel.BearerToken;
request_.Headers["x-acs-bearer-token"] = bearerToken;
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;
}
string stringToSign = AlibabaCloud.OpenApiUtil.Client.GetStringToSign(request_);
request_.Headers["authorization"] = "acs " + accessKeyId + ":" + AlibabaCloud.OpenApiUtil.Client.GetROASignature(stringToSign, accessKeySecret);
}
}
_lastRequest = request_;
TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
if (AlibabaCloud.TeaUtil.Common.EqualNumber(response_.StatusCode, 204))
{
return new Dictionary<string, object>
{
{"headers", response_.Headers},
};
}
if (AlibabaCloud.TeaUtil.Common.Is4xx(response_.StatusCode) || AlibabaCloud.TeaUtil.Common.Is5xx(response_.StatusCode))
{
object _res = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response_.Body);
Dictionary<string, object> 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(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(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(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(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(bodyType, "array"))
{
object arr = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response_.Body);
return new Dictionary<string, object>
{
{"body", arr},
{"headers", response_.Headers},
{"statusCode", response_.StatusCode},
};
}
else
{
return new Dictionary<string, object>
{
{"headers", response_.Headers},
{"statusCode", response_.StatusCode},
};
}
}
catch (Exception e)
{
if (TeaCore.IsRetryable(e))
{
_lastException = e;
continue;
}
throw e;
}
}
throw new TeaUnretryableException(_lastRequest, _lastException);
}
/**
* Encapsulate the request and invoke the network
* @param action api name
* @param version product version
* @param protocol http or https
* @param method e.g. GET
* @param authType authorization type e.g. AK
* @param bodyType response body type e.g. String
* @param request object of OpenApiRequest
* @param runtime which controls some details of call api, such as retry times
* @return the response
*/
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);
}
/**
* Encapsulate the request and invoke the network
* @param action api name
* @param version product version
* @param protocol http or https
* @param method e.g. GET
* @param authType authorization type e.g. AK
* @param bodyType response body type e.g. String
* @param request object of OpenApiRequest
* @param runtime which controls some details of call api, such as retry times
* @return the response
*/
public async Task<Dictionary<string, object>> DoRequestAsync(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 = await this._credential.GetCredentialAsync();
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_ = await TeaCore.DoActionAsync(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);
}
/**
* Encapsulate the request and invoke the network
* @param action api name
* @param version product version
* @param protocol http or https
* @param method e.g. GET
* @param authType authorization type e.g. AK
* @param bodyType response body type e.g. String
* @param request object of OpenApiRequest
* @param runtime which controls some details of call api, such as retry times
* @return the response
*/
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);
}
/**
* Encapsulate the request and invoke the network
* @param action api name
* @param version product version
* @param protocol http or https
* @param method e.g. GET
* @param authType authorization type e.g. AK
* @param bodyType response body type e.g. String
* @param request object of OpenApiRequest
* @param runtime which controls some details of call api, such as retry times
* @return the response
*/
public async Task<Dictionary<string, object>> ExecuteAsync(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);
await this._spi.ModifyConfigurationAsync(interceptorContext, attributeMap);
// 2. spi.modifyRequest(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
await this._spi.ModifyRequestAsync(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_ = await TeaCore.DoActionAsync(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);
await this._spi.ModifyResponseAsync(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);
}
public Dictionary<string, object> CallApi(Params params_, OpenApiRequest request, AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime)
{
if (AlibabaCloud.TeaUtil.Common.IsUnset(params_))
{
throw new TeaException(new Dictionary<string, string>
{
{"code", "ParameterMissing"},
{"message", "'params' can not be unset"},
});
}
if (AlibabaCloud.TeaUtil.Common.IsUnset(_signatureAlgorithm) || !AlibabaCloud.TeaUtil.Common.EqualString(_signatureAlgorithm, "v2"))
{
return DoRequest(params_, request, runtime);
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(params_.Style, "ROA") && AlibabaCloud.TeaUtil.Common.EqualString(params_.ReqBodyType, "json"))
{
return DoROARequest(params_.Action, params_.Version, params_.Protocol, params_.Method, params_.AuthType, params_.Pathname, params_.BodyType, request, runtime);
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(params_.Style, "ROA"))
{
return DoROARequestWithForm(params_.Action, params_.Version, params_.Protocol, params_.Method, params_.AuthType, params_.Pathname, params_.BodyType, request, runtime);
}
else
{
return DoRPCRequest(params_.Action, params_.Version, params_.Protocol, params_.Method, params_.AuthType, params_.BodyType, request, runtime);
}
}
public async Task<Dictionary<string, object>> CallApiAsync(Params params_, OpenApiRequest request, AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime)
{
if (AlibabaCloud.TeaUtil.Common.IsUnset(params_))
{
throw new TeaException(new Dictionary<string, string>
{
{"code", "ParameterMissing"},
{"message", "'params' can not be unset"},
});
}
if (AlibabaCloud.TeaUtil.Common.IsUnset(_signatureAlgorithm) || !AlibabaCloud.TeaUtil.Common.EqualString(_signatureAlgorithm, "v2"))
{
return await DoRequestAsync(params_, request, runtime);
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(params_.Style, "ROA") && AlibabaCloud.TeaUtil.Common.EqualString(params_.ReqBodyType, "json"))
{
return await DoROARequestAsync(params_.Action, params_.Version, params_.Protocol, params_.Method, params_.AuthType, params_.Pathname, params_.BodyType, request, runtime);
}
else if (AlibabaCloud.TeaUtil.Common.EqualString(params_.Style, "ROA"))
{
return await DoROARequestWithFormAsync(params_.Action, params_.Version, params_.Protocol, params_.Method, params_.AuthType, params_.Pathname, params_.BodyType, request, runtime);
}
else
{
return await DoRPCRequestAsync(params_.Action, params_.Version, params_.Protocol, params_.Method, params_.AuthType, params_.BodyType, request, runtime);
}
}
/**
* Get user agent
* @return user agent
*/
public string GetUserAgent()
{
string userAgent = AlibabaCloud.TeaUtil.Common.GetUserAgent(_userAgent);
return userAgent;
}
/**
* Get accesskey id by using credential
* @return accesskey id
*/
public string GetAccessKeyId()
{
if (AlibabaCloud.TeaUtil.Common.IsUnset(_credential))
{
return "";
}
string accessKeyId = this._credential.GetAccessKeyId();
return accessKeyId;
}
/**
* Get accesskey id by using credential
* @return accesskey id
*/
public async Task<string> GetAccessKeyIdAsync()
{
if (AlibabaCloud.TeaUtil.Common.IsUnset(_credential))
{
return "";
}
string accessKeyId = await this._credential.GetAccessKeyIdAsync();
return accessKeyId;
}
/**
* Get accesskey secret by using credential
* @return accesskey secret
*/
public string GetAccessKeySecret()
{
if (AlibabaCloud.TeaUtil.Common.IsUnset(_credential))
{
return "";
}
string secret = this._credential.GetAccessKeySecret();
return secret;
}
/**
* Get accesskey secret by using credential
* @return accesskey secret
*/
public async Task<string> GetAccessKeySecretAsync()
{
if (AlibabaCloud.TeaUtil.Common.IsUnset(_credential))
{
return "";
}
string secret = await this._credential.GetAccessKeySecretAsync();
return secret;
}
/**
* Get security token by using credential
* @return security token
*/
public string GetSecurityToken()
{
if (AlibabaCloud.TeaUtil.Common.IsUnset(_credential))
{
return "";
}
string token = this._credential.GetSecurityToken();
return token;
}
/**
* Get security token by using credential
* @return security token
*/
public async Task<string> GetSecurityTokenAsync()
{
if (AlibabaCloud.TeaUtil.Common.IsUnset(_credential))
{
return "";
}
string token = await this._credential.GetSecurityTokenAsync();
return token;
}
/**
* Get bearer token by credential
* @return bearer token
*/
public string GetBearerToken()
{
if (AlibabaCloud.TeaUtil.Common.IsUnset(_credential))
{
return "";
}
string token = this._credential.GetBearerToken();
return token;
}
/**
* Get bearer token by credential
* @return bearer token
*/
public async Task<string> GetBearerTokenAsync()
{
if (AlibabaCloud.TeaUtil.Common.IsUnset(_credential))
{
return "";
}
string token = this._credential.GetBearerToken();
return token;
}
/**
* Get credential type by credential
* @return credential type e.g. access_key
*/
public string GetType()
{
if (AlibabaCloud.TeaUtil.Common.IsUnset(_credential))
{
return "";
}
string authType = this._credential.GetType();
return authType;
}
/**
* Get credential type by credential
* @return credential type e.g. access_key
*/
public async Task<string> GetTypeAsync()
{
if (AlibabaCloud.TeaUtil.Common.IsUnset(_credential))
{
return "";
}
string authType = this._credential.GetType();
return authType;
}
/**
* If inputValue is not null, return it or return defaultValue
* @param inputValue users input value
* @param defaultValue default value
* @return the final result
*/
public static object DefaultAny(object inputValue, object defaultValue)
{
if (AlibabaCloud.TeaUtil.Common.IsUnset(inputValue))
{
return defaultValue;
}
return inputValue;
}
/**
* If the endpointRule and config.endpoint are empty, throw error
* @param config config contains the necessary information to create a client
*/
public void CheckConfig(Config config)
{
if (AlibabaCloud.TeaUtil.Common.Empty(_endpointRule) && AlibabaCloud.TeaUtil.Common.Empty(config.Endpoint))
{
throw new TeaException(new Dictionary<string, string>
{
{"code", "ParameterMissing"},
{"message", "'config.endpoint' can not be empty"},
});
}
}
/**
* set gateway client
* @param spi.
*/
public void SetGatewayClient(AlibabaCloud.GatewaySpi.Client spi)
{
this._spi = spi;
}
/**
* set RPC header for debug
* @param headers headers for debug, this header can be used only once.
*/
public void SetRpcHeaders(Dictionary<string, string> headers)
{
this._headers = headers;
}
/**
* get RPC header for debug
*/
public Dictionary<string, string> GetRpcHeaders()
{
Dictionary<string, string> headers = _headers;
this._headers = null;
return headers;
}
}
}