alibabacloud-gateway-pds/csharp/core/Client.cs (719 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; namespace AlibabaCloud.GatewayPds { public class Client : AlibabaCloud.GatewaySpi.Client { public Client(): base() { } public void ModifyConfiguration(AlibabaCloud.GatewaySpi.Models.InterceptorContext context, AlibabaCloud.GatewaySpi.Models.AttributeMap attributeMap) { AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextConfiguration config = context.Configuration; config.Endpoint = GetEndpoint(config.Network, config.Endpoint); } public async Task ModifyConfigurationAsync(AlibabaCloud.GatewaySpi.Models.InterceptorContext context, AlibabaCloud.GatewaySpi.Models.AttributeMap attributeMap) { AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextConfiguration config = context.Configuration; config.Endpoint = await GetEndpointAsync(config.Network, config.Endpoint); } public void ModifyRequest(AlibabaCloud.GatewaySpi.Models.InterceptorContext context, AlibabaCloud.GatewaySpi.Models.AttributeMap attributeMap) { AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextRequest request = context.Request; AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextConfiguration config = context.Configuration; string date = AlibabaCloud.TeaUtil.Common.GetDateUTCString(); request.Headers = TeaConverter.merge<string> ( new Dictionary<string, string>() { {"date", date}, {"host", config.Endpoint}, {"x-acs-version", request.Version}, {"x-acs-action", request.Action}, {"user-agent", request.UserAgent}, {"x-acs-signature-nonce", AlibabaCloud.TeaUtil.Common.GetNonce()}, {"accept", "application/json"}, }, request.Headers ); string signatureAlgorithm = AlibabaCloud.TeaUtil.Common.DefaultString(request.SignatureAlgorithm, "ACS4-HMAC-SHA256"); string signatureVersion = AlibabaCloud.TeaUtil.Common.DefaultString(request.SignatureVersion, "v1"); string hashedRequestPayload = AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaEncodeUtil.Encoder.Hash(AlibabaCloud.TeaUtil.Common.ToBytes(""), signatureAlgorithm)); if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Stream)) { byte[] tmp = AlibabaCloud.TeaUtil.Common.ReadAsBytes(request.Stream); hashedRequestPayload = AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaEncodeUtil.Encoder.Hash(tmp, signatureAlgorithm)); request.Stream = TeaCore.BytesReadable(tmp); request.Headers["content-type"] = "application/octet-stream"; } else { if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Body)) { if (AlibabaCloud.TeaUtil.Common.EqualString(request.ReqBodyType, "json")) { string jsonObj = AlibabaCloud.TeaUtil.Common.ToJSONString(request.Body); hashedRequestPayload = AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaEncodeUtil.Encoder.Hash(AlibabaCloud.TeaUtil.Common.ToBytes(jsonObj), signatureAlgorithm)); request.Stream = 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.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaEncodeUtil.Encoder.Hash(AlibabaCloud.TeaUtil.Common.ToBytes(formObj), signatureAlgorithm)); request.Stream = TeaCore.BytesReadable(formObj); request.Headers["content-type"] = "application/x-www-form-urlencoded"; } } } if (AlibabaCloud.DarabonbaString.StringUtil.Equals(signatureVersion, "v4")) { if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, "ACS4-HMAC-SM3")) { request.Headers["x-acs-content-sm3"] = hashedRequestPayload; } else { request.Headers["x-acs-content-sha256"] = hashedRequestPayload; } } else { request.Headers["x-acs-signature-method"] = "HMAC-SHA1"; request.Headers["x-acs-signature-version"] = "1.0"; } if (!AlibabaCloud.TeaUtil.Common.EqualString(request.AuthType, "Anonymous") && !AlibabaCloud.TeaUtil.Common.IsUnset(request.Credential)) { Aliyun.Credentials.Client credential = request.Credential; Aliyun.Credentials.Models.CredentialModel credentialModel = credential.GetCredential(); string authType = credentialModel.Type; if (AlibabaCloud.TeaUtil.Common.EqualString(authType, "bearer")) { string bearerToken = credentialModel.BearerToken; request.Headers["x-acs-bearer-token"] = bearerToken; request.Headers["Authorization"] = "Bearer " + bearerToken; } else { string accessKeyId = credentialModel.AccessKeyId; string accessKeySecret = credentialModel.AccessKeySecret; string securityToken = credentialModel.SecurityToken; if (!AlibabaCloud.TeaUtil.Common.Empty(securityToken)) { request.Headers["x-acs-security-token"] = securityToken; } Dictionary<string, string> headers = new Dictionary<string, string>(){}; if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Headers.Get("content-type"))) { headers = request.Headers; } else if (AlibabaCloud.DarabonbaString.StringUtil.Equals(request.ReqBodyType, "formData") && AlibabaCloud.DarabonbaString.StringUtil.Equals(request.Action, "DownloadFile") && AlibabaCloud.DarabonbaString.StringUtil.Equals(request.Pathname, "/v2/file/download")) { List<string> headersArray = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(request.Headers); foreach (var key in headersArray) { headers[key] = request.Headers.Get(key); } headers["content-type"] = "application/x-www-form-urlencoded; charset=UTF-8"; } else { headers = request.Headers; } if (AlibabaCloud.DarabonbaString.StringUtil.Equals(signatureVersion, "v4")) { string dateNew = AlibabaCloud.DarabonbaString.StringUtil.SubString(date, 0, 10); string region = GetRegion(config.Endpoint); byte[] signingkey = GetSigningkey(signatureAlgorithm, accessKeySecret, region, dateNew); request.Headers["Authorization"] = GetAuthorizationV4(request.Pathname, request.Method, request.Query, headers, signatureAlgorithm, hashedRequestPayload, accessKeyId, signingkey, request.ProductId, region, dateNew); } else { request.Headers["Authorization"] = GetAuthorization(request.Pathname, request.Method, request.Query, headers, accessKeyId, accessKeySecret); } } } } public async Task ModifyRequestAsync(AlibabaCloud.GatewaySpi.Models.InterceptorContext context, AlibabaCloud.GatewaySpi.Models.AttributeMap attributeMap) { AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextRequest request = context.Request; AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextConfiguration config = context.Configuration; string date = AlibabaCloud.TeaUtil.Common.GetDateUTCString(); request.Headers = TeaConverter.merge<string> ( new Dictionary<string, string>() { {"date", date}, {"host", config.Endpoint}, {"x-acs-version", request.Version}, {"x-acs-action", request.Action}, {"user-agent", request.UserAgent}, {"x-acs-signature-nonce", AlibabaCloud.TeaUtil.Common.GetNonce()}, {"accept", "application/json"}, }, request.Headers ); string signatureAlgorithm = AlibabaCloud.TeaUtil.Common.DefaultString(request.SignatureAlgorithm, "ACS4-HMAC-SHA256"); string signatureVersion = AlibabaCloud.TeaUtil.Common.DefaultString(request.SignatureVersion, "v1"); string hashedRequestPayload = AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaEncodeUtil.Encoder.Hash(AlibabaCloud.TeaUtil.Common.ToBytes(""), signatureAlgorithm)); if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Stream)) { byte[] tmp = AlibabaCloud.TeaUtil.Common.ReadAsBytes(request.Stream); hashedRequestPayload = AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaEncodeUtil.Encoder.Hash(tmp, signatureAlgorithm)); request.Stream = TeaCore.BytesReadable(tmp); request.Headers["content-type"] = "application/octet-stream"; } else { if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Body)) { if (AlibabaCloud.TeaUtil.Common.EqualString(request.ReqBodyType, "json")) { string jsonObj = AlibabaCloud.TeaUtil.Common.ToJSONString(request.Body); hashedRequestPayload = AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaEncodeUtil.Encoder.Hash(AlibabaCloud.TeaUtil.Common.ToBytes(jsonObj), signatureAlgorithm)); request.Stream = 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.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaEncodeUtil.Encoder.Hash(AlibabaCloud.TeaUtil.Common.ToBytes(formObj), signatureAlgorithm)); request.Stream = TeaCore.BytesReadable(formObj); request.Headers["content-type"] = "application/x-www-form-urlencoded"; } } } if (AlibabaCloud.DarabonbaString.StringUtil.Equals(signatureVersion, "v4")) { if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, "ACS4-HMAC-SM3")) { request.Headers["x-acs-content-sm3"] = hashedRequestPayload; } else { request.Headers["x-acs-content-sha256"] = hashedRequestPayload; } } else { request.Headers["x-acs-signature-method"] = "HMAC-SHA1"; request.Headers["x-acs-signature-version"] = "1.0"; } if (!AlibabaCloud.TeaUtil.Common.EqualString(request.AuthType, "Anonymous") && !AlibabaCloud.TeaUtil.Common.IsUnset(request.Credential)) { Aliyun.Credentials.Client credential = request.Credential; Aliyun.Credentials.Models.CredentialModel credentialModel = await credential.GetCredentialAsync(); string authType = credentialModel.Type; if (AlibabaCloud.TeaUtil.Common.EqualString(authType, "bearer")) { string bearerToken = credentialModel.BearerToken; request.Headers["x-acs-bearer-token"] = bearerToken; request.Headers["Authorization"] = "Bearer " + bearerToken; } else { string accessKeyId = credentialModel.AccessKeyId; string accessKeySecret = credentialModel.AccessKeySecret; string securityToken = credentialModel.SecurityToken; if (!AlibabaCloud.TeaUtil.Common.Empty(securityToken)) { request.Headers["x-acs-security-token"] = securityToken; } Dictionary<string, string> headers = new Dictionary<string, string>(){}; if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Headers.Get("content-type"))) { headers = request.Headers; } else if (AlibabaCloud.DarabonbaString.StringUtil.Equals(request.ReqBodyType, "formData") && AlibabaCloud.DarabonbaString.StringUtil.Equals(request.Action, "DownloadFile") && AlibabaCloud.DarabonbaString.StringUtil.Equals(request.Pathname, "/v2/file/download")) { List<string> headersArray = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(request.Headers); foreach (var key in headersArray) { headers[key] = request.Headers.Get(key); } headers["content-type"] = "application/x-www-form-urlencoded; charset=UTF-8"; } else { headers = request.Headers; } if (AlibabaCloud.DarabonbaString.StringUtil.Equals(signatureVersion, "v4")) { string dateNew = AlibabaCloud.DarabonbaString.StringUtil.SubString(date, 0, 10); string region = GetRegion(config.Endpoint); byte[] signingkey = await GetSigningkeyAsync(signatureAlgorithm, accessKeySecret, region, dateNew); request.Headers["Authorization"] = await GetAuthorizationV4Async(request.Pathname, request.Method, request.Query, headers, signatureAlgorithm, hashedRequestPayload, accessKeyId, signingkey, request.ProductId, region, dateNew); } else { request.Headers["Authorization"] = await GetAuthorizationAsync(request.Pathname, request.Method, request.Query, headers, accessKeyId, accessKeySecret); } } } } public void ModifyResponse(AlibabaCloud.GatewaySpi.Models.InterceptorContext context, AlibabaCloud.GatewaySpi.Models.AttributeMap attributeMap) { AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextRequest request = context.Request; AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextResponse response = context.Response; 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); Dictionary<string, string> headers = response.Headers; string requestId = headers.Get("x-ca-request-id"); err["statusCode"] = response.StatusCode; err["requestId"] = requestId; throw new TeaException(new Dictionary<string, object> { {"code", "" + DefaultAny(err.Get("Code"), err.Get("code"))}, {"message", "" + DefaultAny(err.Get("Message"), err.Get("message"))}, {"data", err}, }); } if (!AlibabaCloud.TeaUtil.Common.IsUnset(response.Body)) { if (AlibabaCloud.TeaUtil.Common.EqualNumber(response.StatusCode, 204)) { AlibabaCloud.TeaUtil.Common.ReadAsString(response.Body); } else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "binary")) { response.DeserializedBody = response.Body; } else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "byte")) { byte[] byt = AlibabaCloud.TeaUtil.Common.ReadAsBytes(response.Body); response.DeserializedBody = byt; } else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "string")) { string str = AlibabaCloud.TeaUtil.Common.ReadAsString(response.Body); response.DeserializedBody = str; } else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "json")) { response.DeserializedBody = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response.Body); } else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "array")) { response.DeserializedBody = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response.Body); } else { response.DeserializedBody = AlibabaCloud.TeaUtil.Common.ReadAsString(response.Body); } } } public async Task ModifyResponseAsync(AlibabaCloud.GatewaySpi.Models.InterceptorContext context, AlibabaCloud.GatewaySpi.Models.AttributeMap attributeMap) { AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextRequest request = context.Request; AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextResponse response = context.Response; 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); Dictionary<string, string> headers = response.Headers; string requestId = headers.Get("x-ca-request-id"); err["statusCode"] = response.StatusCode; err["requestId"] = requestId; throw new TeaException(new Dictionary<string, object> { {"code", "" + DefaultAny(err.Get("Code"), err.Get("code"))}, {"message", "" + DefaultAny(err.Get("Message"), err.Get("message"))}, {"data", err}, }); } if (!AlibabaCloud.TeaUtil.Common.IsUnset(response.Body)) { if (AlibabaCloud.TeaUtil.Common.EqualNumber(response.StatusCode, 204)) { AlibabaCloud.TeaUtil.Common.ReadAsString(response.Body); } else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "binary")) { response.DeserializedBody = response.Body; } else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "byte")) { byte[] byt = AlibabaCloud.TeaUtil.Common.ReadAsBytes(response.Body); response.DeserializedBody = byt; } else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "string")) { string str = AlibabaCloud.TeaUtil.Common.ReadAsString(response.Body); response.DeserializedBody = str; } else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "json")) { response.DeserializedBody = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response.Body); } else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "array")) { response.DeserializedBody = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response.Body); } else { response.DeserializedBody = AlibabaCloud.TeaUtil.Common.ReadAsString(response.Body); } } } public string GetEndpoint(string network, string endpoint) { string realEndpoint = "api.aliyunpds.com"; if (!AlibabaCloud.TeaUtil.Common.Empty(endpoint)) { realEndpoint = endpoint; } if (!AlibabaCloud.TeaUtil.Common.Empty(network) && AlibabaCloud.DarabonbaString.StringUtil.Equals(network, "vpc")) { realEndpoint = AlibabaCloud.DarabonbaString.StringUtil.Replace(realEndpoint, "api.aliyunpds.com", "api-vpc.aliyunpds.com", null); realEndpoint = AlibabaCloud.DarabonbaString.StringUtil.Replace(realEndpoint, "admin.aliyunpds.com", "admin-vpc.aliyunpds.com", null); } return realEndpoint; } public async Task<string> GetEndpointAsync(string network, string endpoint) { string realEndpoint = "api.aliyunpds.com"; if (!AlibabaCloud.TeaUtil.Common.Empty(endpoint)) { realEndpoint = endpoint; } if (!AlibabaCloud.TeaUtil.Common.Empty(network) && AlibabaCloud.DarabonbaString.StringUtil.Equals(network, "vpc")) { realEndpoint = AlibabaCloud.DarabonbaString.StringUtil.Replace(realEndpoint, "api.aliyunpds.com", "api-vpc.aliyunpds.com", null); realEndpoint = AlibabaCloud.DarabonbaString.StringUtil.Replace(realEndpoint, "admin.aliyunpds.com", "admin-vpc.aliyunpds.com", null); } return realEndpoint; } public object DefaultAny(object inputValue, object defaultValue) { if (AlibabaCloud.TeaUtil.Common.IsUnset(inputValue)) { return defaultValue; } return inputValue; } public string GetAuthorization(string pathname, string method, Dictionary<string, string> query, Dictionary<string, string> headers, string ak, string secret) { string signature = GetSignature(pathname, method, query, headers, secret); return "acs " + ak + ":" + signature; } public async Task<string> GetAuthorizationAsync(string pathname, string method, Dictionary<string, string> query, Dictionary<string, string> headers, string ak, string secret) { string signature = await GetSignatureAsync(pathname, method, query, headers, secret); return "acs " + ak + ":" + signature; } public string GetSignature(string pathname, string method, Dictionary<string, string> query, Dictionary<string, string> headers, string secret) { string stringToSign = ""; string canonicalizedResource = BuildCanonicalizedResource(pathname, query); string canonicalizedHeaders = BuildCanonicalizedHeaders(headers); stringToSign = "" + method + "\n" + canonicalizedHeaders + canonicalizedResource; byte[] signature = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA1Sign(stringToSign, secret); return AlibabaCloud.DarabonbaEncodeUtil.Encoder.Base64EncodeToString(signature); } public async Task<string> GetSignatureAsync(string pathname, string method, Dictionary<string, string> query, Dictionary<string, string> headers, string secret) { string stringToSign = ""; string canonicalizedResource = await BuildCanonicalizedResourceAsync(pathname, query); string canonicalizedHeaders = await BuildCanonicalizedHeadersAsync(headers); stringToSign = "" + method + "\n" + canonicalizedHeaders + canonicalizedResource; byte[] signature = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA1Sign(stringToSign, secret); return AlibabaCloud.DarabonbaEncodeUtil.Encoder.Base64EncodeToString(signature); } public string BuildCanonicalizedResource(string pathname, Dictionary<string, string> query) { string canonicalizedResource = pathname; if (!AlibabaCloud.TeaUtil.Common.IsUnset(query)) { List<string> queryArray = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(query); List<string> sortedQueryArray = AlibabaCloud.DarabonbaArray.ArrayUtil.AscSort(queryArray); string separator = "?"; foreach (var key in sortedQueryArray) { canonicalizedResource = "" + canonicalizedResource + separator + key; if (!AlibabaCloud.TeaUtil.Common.Empty(query.Get(key))) { canonicalizedResource = "" + canonicalizedResource + "=" + query.Get(key); } separator = "&"; } } return canonicalizedResource; } public async Task<string> BuildCanonicalizedResourceAsync(string pathname, Dictionary<string, string> query) { string canonicalizedResource = pathname; if (!AlibabaCloud.TeaUtil.Common.IsUnset(query)) { List<string> queryArray = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(query); List<string> sortedQueryArray = AlibabaCloud.DarabonbaArray.ArrayUtil.AscSort(queryArray); string separator = "?"; foreach (var key in sortedQueryArray) { canonicalizedResource = "" + canonicalizedResource + separator + key; if (!AlibabaCloud.TeaUtil.Common.Empty(query.Get(key))) { canonicalizedResource = "" + canonicalizedResource + "=" + query.Get(key); } separator = "&"; } } return canonicalizedResource; } public string BuildCanonicalizedHeaders(Dictionary<string, string> headers) { string accept = headers.Get("accept"); if (AlibabaCloud.TeaUtil.Common.IsUnset(accept)) { accept = ""; } string contentMd5 = headers.Get("content-md5"); if (AlibabaCloud.TeaUtil.Common.IsUnset(contentMd5)) { contentMd5 = ""; } string contentType = headers.Get("content-type"); if (AlibabaCloud.TeaUtil.Common.IsUnset(contentType)) { contentType = ""; } string date = headers.Get("date"); if (AlibabaCloud.TeaUtil.Common.IsUnset(date)) { date = ""; } string canonicalizedHeaders = "" + accept + "\n" + contentMd5 + "\n" + contentType + "\n" + date + "\n"; List<string> sortedHeaders = GetSignedHeaders(headers); foreach (var header in sortedHeaders) { string value = headers.Get(header); string valueTrim = AlibabaCloud.DarabonbaString.StringUtil.Trim(value); canonicalizedHeaders = "" + canonicalizedHeaders + header + ":" + valueTrim + "\n"; } return canonicalizedHeaders; } public async Task<string> BuildCanonicalizedHeadersAsync(Dictionary<string, string> headers) { string accept = headers.Get("accept"); if (AlibabaCloud.TeaUtil.Common.IsUnset(accept)) { accept = ""; } string contentMd5 = headers.Get("content-md5"); if (AlibabaCloud.TeaUtil.Common.IsUnset(contentMd5)) { contentMd5 = ""; } string contentType = headers.Get("content-type"); if (AlibabaCloud.TeaUtil.Common.IsUnset(contentType)) { contentType = ""; } string date = headers.Get("date"); if (AlibabaCloud.TeaUtil.Common.IsUnset(date)) { date = ""; } string canonicalizedHeaders = "" + accept + "\n" + contentMd5 + "\n" + contentType + "\n" + date + "\n"; List<string> sortedHeaders = await GetSignedHeadersAsync(headers); foreach (var header in sortedHeaders) { string value = headers.Get(header); string valueTrim = AlibabaCloud.DarabonbaString.StringUtil.Trim(value); canonicalizedHeaders = "" + canonicalizedHeaders + header + ":" + valueTrim + "\n"; } return canonicalizedHeaders; } public List<string> GetSignedHeaders(Dictionary<string, string> headers) { List<string> headersArray = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(headers); List<string> sortedHeadersArray = AlibabaCloud.DarabonbaArray.ArrayUtil.AscSort(headersArray); string tmp = ""; string separator = ""; foreach (var key in sortedHeadersArray) { string lowerKey = AlibabaCloud.DarabonbaString.StringUtil.ToLower(key); if (AlibabaCloud.DarabonbaString.StringUtil.HasPrefix(lowerKey, "x-acs-")) { if (!AlibabaCloud.DarabonbaString.StringUtil.Contains(tmp, lowerKey)) { tmp = "" + tmp + separator + lowerKey; separator = ";"; } } } return AlibabaCloud.DarabonbaString.StringUtil.Split(tmp, ";", null); } public async Task<List<string>> GetSignedHeadersAsync(Dictionary<string, string> headers) { List<string> headersArray = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(headers); List<string> sortedHeadersArray = AlibabaCloud.DarabonbaArray.ArrayUtil.AscSort(headersArray); string tmp = ""; string separator = ""; foreach (var key in sortedHeadersArray) { string lowerKey = AlibabaCloud.DarabonbaString.StringUtil.ToLower(key); if (AlibabaCloud.DarabonbaString.StringUtil.HasPrefix(lowerKey, "x-acs-")) { if (!AlibabaCloud.DarabonbaString.StringUtil.Contains(tmp, lowerKey)) { tmp = "" + tmp + separator + lowerKey; separator = ";"; } } } return AlibabaCloud.DarabonbaString.StringUtil.Split(tmp, ";", null); } public string GetRegion(string endpoint) { string region = "center"; if (AlibabaCloud.TeaUtil.Common.Empty(endpoint)) { return region; } if (AlibabaCloud.DarabonbaString.StringUtil.Contains(endpoint, ".admin.aliyunpds.com")) { region = AlibabaCloud.DarabonbaString.StringUtil.Replace(endpoint, ".admin.aliyunpds.com", "", null); } return region; } public byte[] GetSigningkey(string signatureAlgorithm, string secret, string region, string date) { string sc1 = "aliyun_v4" + secret; byte[] sc2 = AlibabaCloud.TeaUtil.Common.ToBytes(""); if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, "ACS4-HMAC-SHA256")) { sc2 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256Sign(date, sc1); } else if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, "ACS4-HMAC-SM3")) { sc2 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3Sign(date, sc1); } byte[] sc3 = AlibabaCloud.TeaUtil.Common.ToBytes(""); if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, "ACS4-HMAC-SHA256")) { sc3 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes(region, sc2); } else if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, "ACS4-HMAC-SM3")) { sc3 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3SignByBytes(region, sc2); } byte[] sc4 = AlibabaCloud.TeaUtil.Common.ToBytes(""); if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, "ACS4-HMAC-SHA256")) { sc4 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes("pds", sc3); } else if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, "ACS4-HMAC-SM3")) { sc4 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3SignByBytes("pds", sc3); } byte[] hmac = AlibabaCloud.TeaUtil.Common.ToBytes(""); if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, "ACS4-HMAC-SHA256")) { hmac = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes("aliyun_v4_request", sc4); } else if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, "ACS4-HMAC-SM3")) { hmac = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3SignByBytes("aliyun_v4_request", sc4); } return hmac; } public async Task<byte[]> GetSigningkeyAsync(string signatureAlgorithm, string secret, string region, string date) { string sc1 = "aliyun_v4" + secret; byte[] sc2 = AlibabaCloud.TeaUtil.Common.ToBytes(""); if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, "ACS4-HMAC-SHA256")) { sc2 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256Sign(date, sc1); } else if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, "ACS4-HMAC-SM3")) { sc2 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3Sign(date, sc1); } byte[] sc3 = AlibabaCloud.TeaUtil.Common.ToBytes(""); if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, "ACS4-HMAC-SHA256")) { sc3 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes(region, sc2); } else if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, "ACS4-HMAC-SM3")) { sc3 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3SignByBytes(region, sc2); } byte[] sc4 = AlibabaCloud.TeaUtil.Common.ToBytes(""); if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, "ACS4-HMAC-SHA256")) { sc4 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes("pds", sc3); } else if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, "ACS4-HMAC-SM3")) { sc4 = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3SignByBytes("pds", sc3); } byte[] hmac = AlibabaCloud.TeaUtil.Common.ToBytes(""); if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, "ACS4-HMAC-SHA256")) { hmac = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes("aliyun_v4_request", sc4); } else if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, "ACS4-HMAC-SM3")) { hmac = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3SignByBytes("aliyun_v4_request", sc4); } return hmac; } public string GetAuthorizationV4(string pathname, string method, Dictionary<string, string> query, Dictionary<string, string> headers, string signatureAlgorithm, string payload, string ak, byte[] signingkey, string product, string region, string date) { string signature = GetSignatureV4(pathname, method, query, headers, signatureAlgorithm, payload, signingkey); List<string> signedHeaders = GetSignedHeaders(headers); string signedHeadersStr = AlibabaCloud.DarabonbaArray.ArrayUtil.Join(signedHeaders, ";"); return "" + signatureAlgorithm + " Credential=" + ak + "/" + date + "/" + region + "/" + product + "/aliyun_v4_request,SignedHeaders=" + signedHeadersStr + ",Signature=" + signature; } public async Task<string> GetAuthorizationV4Async(string pathname, string method, Dictionary<string, string> query, Dictionary<string, string> headers, string signatureAlgorithm, string payload, string ak, byte[] signingkey, string product, string region, string date) { string signature = await GetSignatureV4Async(pathname, method, query, headers, signatureAlgorithm, payload, signingkey); List<string> signedHeaders = await GetSignedHeadersAsync(headers); string signedHeadersStr = AlibabaCloud.DarabonbaArray.ArrayUtil.Join(signedHeaders, ";"); return "" + signatureAlgorithm + " Credential=" + ak + "/" + date + "/" + region + "/" + product + "/aliyun_v4_request,SignedHeaders=" + signedHeadersStr + ",Signature=" + signature; } public string GetSignatureV4(string pathname, string method, Dictionary<string, string> query, Dictionary<string, string> headers, string signatureAlgorithm, string payload, byte[] signingkey) { string stringToSign = ""; string canonicalizedResource = BuildCanonicalizedResource(pathname, query); string canonicalizedHeaders = BuildCanonicalizedHeaders(headers); List<string> signedHeaders = GetSignedHeaders(headers); string signedHeadersStr = AlibabaCloud.DarabonbaArray.ArrayUtil.Join(signedHeaders, ";"); stringToSign = "" + method + "\n" + canonicalizedResource + "\n" + canonicalizedHeaders + "\n" + signedHeadersStr + "\n" + payload; string hex = AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaEncodeUtil.Encoder.Hash(AlibabaCloud.TeaUtil.Common.ToBytes(stringToSign), signatureAlgorithm)); stringToSign = "" + signatureAlgorithm + "\n" + hex; byte[] signature = AlibabaCloud.TeaUtil.Common.ToBytes(""); if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, "ACS4-HMAC-SHA256")) { signature = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes(stringToSign, signingkey); } else if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, "ACS4-HMAC-SM3")) { signature = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3SignByBytes(stringToSign, signingkey); } return AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(signature); } public async Task<string> GetSignatureV4Async(string pathname, string method, Dictionary<string, string> query, Dictionary<string, string> headers, string signatureAlgorithm, string payload, byte[] signingkey) { string stringToSign = ""; string canonicalizedResource = await BuildCanonicalizedResourceAsync(pathname, query); string canonicalizedHeaders = await BuildCanonicalizedHeadersAsync(headers); List<string> signedHeaders = await GetSignedHeadersAsync(headers); string signedHeadersStr = AlibabaCloud.DarabonbaArray.ArrayUtil.Join(signedHeaders, ";"); stringToSign = "" + method + "\n" + canonicalizedResource + "\n" + canonicalizedHeaders + "\n" + signedHeadersStr + "\n" + payload; string hex = AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaEncodeUtil.Encoder.Hash(AlibabaCloud.TeaUtil.Common.ToBytes(stringToSign), signatureAlgorithm)); stringToSign = "" + signatureAlgorithm + "\n" + hex; byte[] signature = AlibabaCloud.TeaUtil.Common.ToBytes(""); if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, "ACS4-HMAC-SHA256")) { signature = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes(stringToSign, signingkey); } else if (AlibabaCloud.TeaUtil.Common.EqualString(signatureAlgorithm, "ACS4-HMAC-SM3")) { signature = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSM3SignByBytes(stringToSign, signingkey); } return AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(signature); } } }