alibabacloud-gateway-oss/csharp/core/Client.cs (1,120 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.GatewayOss { public class Client : AlibabaCloud.GatewaySpi.Client { protected List<string> _default_signed_params; protected List<string> _except_signed_params; public Client(): base() { this._default_signed_params = new List<string> { "response-content-type", "response-content-language", "response-cache-control", "logging", "response-content-encoding", "acl", "uploadId", "uploads", "partNumber", "group", "link", "delete", "website", "location", "objectInfo", "objectMeta", "response-expires", "response-content-disposition", "cors", "lifecycle", "restore", "qos", "referer", "stat", "bucketInfo", "append", "position", "security-token", "live", "comp", "status", "vod", "startTime", "endTime", "x-oss-process", "symlink", "callback", "callback-var", "tagging", "encryption", "versions", "versioning", "versionId", "policy", "requestPayment", "x-oss-traffic-limit", "qosInfo", "asyncFetch", "x-oss-request-payer", "sequential", "inventory", "inventoryId", "continuation-token", "callback", "callback-var", "worm", "wormId", "wormExtend", "replication", "replicationLocation", "replicationProgress", "transferAcceleration", "cname", "metaQuery", "x-oss-ac-source-ip", "x-oss-ac-subnet-mask", "x-oss-ac-vpc-id", "x-oss-ac-forward-allow", "resourceGroup", "style", "styleName", "x-oss-async-process", "rtc", "accessPoint", "accessPointPolicy", "httpsConfig", "regionsV2", "publicAccessBlock", "policyStatus", "redundancyTransition", "redundancyType", "redundancyProgress", "dataAccelerator", "verbose", "accessPointForObjectProcess", "accessPointConfigForObjectProcess", "accessPointPolicyForObjectProcess", "bucketArchiveDirectRead", "responseHeader", "userDefinedLogFieldsConfig" }; this._except_signed_params = new List<string> { "list-type", "regions" }; } 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.RegionId, 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.RegionId, 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; Dictionary<string, string> hostMap = new Dictionary<string, string>(){}; if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.HostMap)) { hostMap = request.HostMap; } string bucketName = hostMap.Get("bucket"); if (AlibabaCloud.TeaUtil.Common.IsUnset(bucketName)) { bucketName = ""; } if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Headers.Get("x-oss-meta-*"))) { object tmp = AlibabaCloud.TeaUtil.Common.ParseJSON(request.Headers.Get("x-oss-meta-*")); Dictionary<string, object> mapData = AlibabaCloud.TeaUtil.Common.AssertAsMap(tmp); Dictionary<string, string> metaData = AlibabaCloud.TeaUtil.Common.StringifyMapValue(mapData); List<string> metaKeySet = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(metaData); request.Headers["x-oss-meta-*"] = null; foreach (var key in metaKeySet) { string newKey = "x-oss-meta-" + key; request.Headers[newKey] = metaData.Get(key); } } AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextConfiguration config = context.Configuration; string regionId = config.RegionId; Aliyun.Credentials.Client credential = request.Credential; string accessKeyId = credential.GetAccessKeyId(); string accessKeySecret = credential.GetAccessKeySecret(); string securityToken = credential.GetSecurityToken(); if (!AlibabaCloud.TeaUtil.Common.Empty(securityToken)) { request.Headers["x-oss-security-token"] = securityToken; } if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Body)) { if (AlibabaCloud.DarabonbaString.StringUtil.Equals(request.ReqBodyType, "xml")) { Dictionary<string, object> reqBodyMap = AlibabaCloud.TeaUtil.Common.AssertAsMap(request.Body); string xmlStr = AlibabaCloud.TeaXML.Client.ToXML(reqBodyMap); request.Stream = TeaCore.BytesReadable(xmlStr); request.Headers["content-type"] = "application/xml"; request.Headers["content-md5"] = AlibabaCloud.DarabonbaEncodeUtil.Encoder.Base64EncodeToString(AlibabaCloud.DarabonbaSignatureUtil.Signer.MD5Sign(xmlStr)); } else if (AlibabaCloud.DarabonbaString.StringUtil.Equals(request.ReqBodyType, "json")) { string reqBodyStr = AlibabaCloud.TeaUtil.Common.ToJSONString(request.Body); request.Stream = TeaCore.BytesReadable(reqBodyStr); request.Headers["content-type"] = "application/json; charset=utf-8"; } else if (AlibabaCloud.DarabonbaString.StringUtil.Equals(request.ReqBodyType, "formData")) { Dictionary<string, object> reqBodyForm = AlibabaCloud.TeaUtil.Common.AssertAsMap(request.Body); request.Stream = TeaCore.BytesReadable(AlibabaCloud.OpenApiUtil.Client.ToForm(reqBodyForm)); request.Headers["content-type"] = "application/x-www-form-urlencoded"; } else if (AlibabaCloud.DarabonbaString.StringUtil.Equals(request.ReqBodyType, "binary")) { attributeMap.Key = new Dictionary<string, string> { {"crc", ""}, {"md5", ""}, }; request.Stream = AlibabaCloud.OSSUtil.Common.Inject(request.Stream, attributeMap.Key); request.Headers["content-type"] = "application/octet-stream"; } } string host = GetHost(config.EndpointType, bucketName, config.Endpoint); request.Headers = TeaConverter.merge<string> ( new Dictionary<string, string>() { {"host", host}, {"date", AlibabaCloud.TeaUtil.Common.GetDateUTCString()}, {"user-agent", request.UserAgent}, }, request.Headers ); string signatureVersion = AlibabaCloud.TeaUtil.Common.DefaultString(request.SignatureVersion, "v1"); request.Headers["authorization"] = GetAuthorization(signatureVersion, bucketName, request.Pathname, request.Method, request.Query, request.Headers, accessKeyId, accessKeySecret, regionId); } public async Task ModifyRequestAsync(AlibabaCloud.GatewaySpi.Models.InterceptorContext context, AlibabaCloud.GatewaySpi.Models.AttributeMap attributeMap) { AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextRequest request = context.Request; Dictionary<string, string> hostMap = new Dictionary<string, string>(){}; if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.HostMap)) { hostMap = request.HostMap; } string bucketName = hostMap.Get("bucket"); if (AlibabaCloud.TeaUtil.Common.IsUnset(bucketName)) { bucketName = ""; } if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Headers.Get("x-oss-meta-*"))) { object tmp = AlibabaCloud.TeaUtil.Common.ParseJSON(request.Headers.Get("x-oss-meta-*")); Dictionary<string, object> mapData = AlibabaCloud.TeaUtil.Common.AssertAsMap(tmp); Dictionary<string, string> metaData = AlibabaCloud.TeaUtil.Common.StringifyMapValue(mapData); List<string> metaKeySet = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(metaData); request.Headers["x-oss-meta-*"] = null; foreach (var key in metaKeySet) { string newKey = "x-oss-meta-" + key; request.Headers[newKey] = metaData.Get(key); } } AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextConfiguration config = context.Configuration; string regionId = config.RegionId; Aliyun.Credentials.Client credential = request.Credential; string accessKeyId = await credential.GetAccessKeyIdAsync(); string accessKeySecret = await credential.GetAccessKeySecretAsync(); string securityToken = await credential.GetSecurityTokenAsync(); if (!AlibabaCloud.TeaUtil.Common.Empty(securityToken)) { request.Headers["x-oss-security-token"] = securityToken; } if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Body)) { if (AlibabaCloud.DarabonbaString.StringUtil.Equals(request.ReqBodyType, "xml")) { Dictionary<string, object> reqBodyMap = AlibabaCloud.TeaUtil.Common.AssertAsMap(request.Body); string xmlStr = AlibabaCloud.TeaXML.Client.ToXML(reqBodyMap); request.Stream = TeaCore.BytesReadable(xmlStr); request.Headers["content-type"] = "application/xml"; request.Headers["content-md5"] = AlibabaCloud.DarabonbaEncodeUtil.Encoder.Base64EncodeToString(AlibabaCloud.DarabonbaSignatureUtil.Signer.MD5Sign(xmlStr)); } else if (AlibabaCloud.DarabonbaString.StringUtil.Equals(request.ReqBodyType, "json")) { string reqBodyStr = AlibabaCloud.TeaUtil.Common.ToJSONString(request.Body); request.Stream = TeaCore.BytesReadable(reqBodyStr); request.Headers["content-type"] = "application/json; charset=utf-8"; } else if (AlibabaCloud.DarabonbaString.StringUtil.Equals(request.ReqBodyType, "formData")) { Dictionary<string, object> reqBodyForm = AlibabaCloud.TeaUtil.Common.AssertAsMap(request.Body); request.Stream = TeaCore.BytesReadable(AlibabaCloud.OpenApiUtil.Client.ToForm(reqBodyForm)); request.Headers["content-type"] = "application/x-www-form-urlencoded"; } else if (AlibabaCloud.DarabonbaString.StringUtil.Equals(request.ReqBodyType, "binary")) { attributeMap.Key = new Dictionary<string, string> { {"crc", ""}, {"md5", ""}, }; request.Stream = AlibabaCloud.OSSUtil.Common.Inject(request.Stream, attributeMap.Key); request.Headers["content-type"] = "application/octet-stream"; } } string host = await GetHostAsync(config.EndpointType, bucketName, config.Endpoint); request.Headers = TeaConverter.merge<string> ( new Dictionary<string, string>() { {"host", host}, {"date", AlibabaCloud.TeaUtil.Common.GetDateUTCString()}, {"user-agent", request.UserAgent}, }, request.Headers ); string signatureVersion = AlibabaCloud.TeaUtil.Common.DefaultString(request.SignatureVersion, "v1"); request.Headers["authorization"] = await GetAuthorizationAsync(signatureVersion, bucketName, request.Pathname, request.Method, request.Query, request.Headers, accessKeyId, accessKeySecret, regionId); } 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; string bodyStr = null; if (AlibabaCloud.TeaUtil.Common.Is4xx(response.StatusCode) || AlibabaCloud.TeaUtil.Common.Is5xx(response.StatusCode)) { bodyStr = AlibabaCloud.TeaUtil.Common.ReadAsString(response.Body); if (!AlibabaCloud.TeaUtil.Common.Empty(bodyStr)) { Dictionary<string, object> respMap = AlibabaCloud.TeaXML.Client.ParseXml(bodyStr, null); Dictionary<string, object> err = AlibabaCloud.TeaUtil.Common.AssertAsMap(respMap.Get("Error")); throw new TeaException(new Dictionary<string, object> { {"code", err.Get("Code")}, {"message", err.Get("Message")}, {"data", new Dictionary<string, object> { {"statusCode", response.StatusCode}, {"requestId", err.Get("RequestId")}, {"ecCode", err.Get("EC")}, {"Recommend", err.Get("RecommendDoc")}, {"hostId", err.Get("HostId")}, }}, }); } else { Dictionary<string, string> headers = response.Headers; string requestId = headers.Get("x-oss-request-id"); string ecCode = headers.Get("x-oss-ec-code"); throw new TeaException(new Dictionary<string, object> { {"code", response.StatusCode}, {"message", null}, {"data", new Dictionary<string, object> { {"statusCode", response.StatusCode}, {"requestId", "" + requestId}, {"ecCode", ecCode}, }}, }); } } Dictionary<string, string> ctx = attributeMap.Key; if (!AlibabaCloud.TeaUtil.Common.IsUnset(ctx)) { if (!AlibabaCloud.TeaUtil.Common.IsUnset(ctx.Get("crc")) && !AlibabaCloud.TeaUtil.Common.IsUnset(response.Headers.Get("x-oss-hash-crc64ecma")) && !AlibabaCloud.DarabonbaString.StringUtil.Equals(ctx.Get("crc"), response.Headers.Get("x-oss-hash-crc64ecma"))) { throw new TeaException(new Dictionary<string, object> { {"code", "CrcNotMatched"}, {"data", new Dictionary<string, string> { {"clientCrc", ctx.Get("crc")}, {"serverCrc", response.Headers.Get("x-oss-hash-crc64ecma")}, }}, }); } if (!AlibabaCloud.TeaUtil.Common.IsUnset(ctx.Get("md5")) && !AlibabaCloud.TeaUtil.Common.IsUnset(response.Headers.Get("content-md5")) && !AlibabaCloud.DarabonbaString.StringUtil.Equals(ctx.Get("md5"), response.Headers.Get("content-md5"))) { throw new TeaException(new Dictionary<string, object> { {"code", "MD5NotMatched"}, {"data", new Dictionary<string, string> { {"clientMD5", ctx.Get("md5")}, {"serverMD5", response.Headers.Get("content-md5")}, }}, }); } } if (!AlibabaCloud.TeaUtil.Common.IsUnset(response.Body)) { if (AlibabaCloud.TeaUtil.Common.EqualNumber(response.StatusCode, 204)) { AlibabaCloud.TeaUtil.Common.ReadAsString(response.Body); } else if (AlibabaCloud.DarabonbaString.StringUtil.Equals(request.BodyType, "xml")) { bodyStr = AlibabaCloud.TeaUtil.Common.ReadAsString(response.Body); response.DeserializedBody = bodyStr; if (!AlibabaCloud.TeaUtil.Common.Empty(bodyStr)) { Dictionary<string, object> result = AlibabaCloud.TeaXML.Client.ParseXml(bodyStr, null); List<string> list = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(result); if (AlibabaCloud.TeaUtil.Common.EqualNumber(AlibabaCloud.DarabonbaArray.ArrayUtil.Size(list), 1)) { string tmp = list[0]; try { response.DeserializedBody = AlibabaCloud.TeaUtil.Common.AssertAsMap(result.Get(tmp)); } catch (TeaException error) { response.DeserializedBody = result; } catch (Exception _error) { TeaException error = new TeaException(new Dictionary<string, object> { { "message", _error.Message } }); response.DeserializedBody = result; } } } } 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")) { response.DeserializedBody = AlibabaCloud.TeaUtil.Common.ReadAsString(response.Body); } else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "json")) { object obj = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response.Body); Dictionary<string, object> res = AlibabaCloud.TeaUtil.Common.AssertAsMap(obj); response.DeserializedBody = res; } 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; string bodyStr = null; if (AlibabaCloud.TeaUtil.Common.Is4xx(response.StatusCode) || AlibabaCloud.TeaUtil.Common.Is5xx(response.StatusCode)) { bodyStr = AlibabaCloud.TeaUtil.Common.ReadAsString(response.Body); if (!AlibabaCloud.TeaUtil.Common.Empty(bodyStr)) { Dictionary<string, object> respMap = AlibabaCloud.TeaXML.Client.ParseXml(bodyStr, null); Dictionary<string, object> err = AlibabaCloud.TeaUtil.Common.AssertAsMap(respMap.Get("Error")); throw new TeaException(new Dictionary<string, object> { {"code", err.Get("Code")}, {"message", err.Get("Message")}, {"data", new Dictionary<string, object> { {"statusCode", response.StatusCode}, {"requestId", err.Get("RequestId")}, {"ecCode", err.Get("EC")}, {"Recommend", err.Get("RecommendDoc")}, {"hostId", err.Get("HostId")}, }}, }); } else { Dictionary<string, string> headers = response.Headers; string requestId = headers.Get("x-oss-request-id"); string ecCode = headers.Get("x-oss-ec-code"); throw new TeaException(new Dictionary<string, object> { {"code", response.StatusCode}, {"message", null}, {"data", new Dictionary<string, object> { {"statusCode", response.StatusCode}, {"requestId", "" + requestId}, {"ecCode", ecCode}, }}, }); } } Dictionary<string, string> ctx = attributeMap.Key; if (!AlibabaCloud.TeaUtil.Common.IsUnset(ctx)) { if (!AlibabaCloud.TeaUtil.Common.IsUnset(ctx.Get("crc")) && !AlibabaCloud.TeaUtil.Common.IsUnset(response.Headers.Get("x-oss-hash-crc64ecma")) && !AlibabaCloud.DarabonbaString.StringUtil.Equals(ctx.Get("crc"), response.Headers.Get("x-oss-hash-crc64ecma"))) { throw new TeaException(new Dictionary<string, object> { {"code", "CrcNotMatched"}, {"data", new Dictionary<string, string> { {"clientCrc", ctx.Get("crc")}, {"serverCrc", response.Headers.Get("x-oss-hash-crc64ecma")}, }}, }); } if (!AlibabaCloud.TeaUtil.Common.IsUnset(ctx.Get("md5")) && !AlibabaCloud.TeaUtil.Common.IsUnset(response.Headers.Get("content-md5")) && !AlibabaCloud.DarabonbaString.StringUtil.Equals(ctx.Get("md5"), response.Headers.Get("content-md5"))) { throw new TeaException(new Dictionary<string, object> { {"code", "MD5NotMatched"}, {"data", new Dictionary<string, string> { {"clientMD5", ctx.Get("md5")}, {"serverMD5", response.Headers.Get("content-md5")}, }}, }); } } if (!AlibabaCloud.TeaUtil.Common.IsUnset(response.Body)) { if (AlibabaCloud.TeaUtil.Common.EqualNumber(response.StatusCode, 204)) { AlibabaCloud.TeaUtil.Common.ReadAsString(response.Body); } else if (AlibabaCloud.DarabonbaString.StringUtil.Equals(request.BodyType, "xml")) { bodyStr = AlibabaCloud.TeaUtil.Common.ReadAsString(response.Body); response.DeserializedBody = bodyStr; if (!AlibabaCloud.TeaUtil.Common.Empty(bodyStr)) { Dictionary<string, object> result = AlibabaCloud.TeaXML.Client.ParseXml(bodyStr, null); List<string> list = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(result); if (AlibabaCloud.TeaUtil.Common.EqualNumber(AlibabaCloud.DarabonbaArray.ArrayUtil.Size(list), 1)) { string tmp = list[0]; try { response.DeserializedBody = AlibabaCloud.TeaUtil.Common.AssertAsMap(result.Get(tmp)); } catch (TeaException error) { response.DeserializedBody = result; } catch (Exception _error) { TeaException error = new TeaException(new Dictionary<string, object> { { "message", _error.Message } }); response.DeserializedBody = result; } } } } 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")) { response.DeserializedBody = AlibabaCloud.TeaUtil.Common.ReadAsString(response.Body); } else if (AlibabaCloud.TeaUtil.Common.EqualString(request.BodyType, "json")) { object obj = AlibabaCloud.TeaUtil.Common.ReadAsJSON(response.Body); Dictionary<string, object> res = AlibabaCloud.TeaUtil.Common.AssertAsMap(obj); response.DeserializedBody = res; } 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 regionId, string network, string endpoint) { if (!AlibabaCloud.TeaUtil.Common.Empty(endpoint)) { return endpoint; } if (AlibabaCloud.TeaUtil.Common.Empty(regionId)) { regionId = "cn-hangzhou"; } if (!AlibabaCloud.TeaUtil.Common.Empty(network)) { if (AlibabaCloud.DarabonbaString.StringUtil.Contains(network, "internal")) { return "oss-" + regionId + "-internal.aliyuncs.com"; } else if (AlibabaCloud.DarabonbaString.StringUtil.Contains(network, "ipv6")) { return "" + regionId + "oss.aliyuncs.com"; } else if (AlibabaCloud.DarabonbaString.StringUtil.Contains(network, "accelerate")) { return "oss-" + network + ".aliyuncs.com"; } } return "oss-" + regionId + ".aliyuncs.com"; } public async Task<string> GetEndpointAsync(string regionId, string network, string endpoint) { if (!AlibabaCloud.TeaUtil.Common.Empty(endpoint)) { return endpoint; } if (AlibabaCloud.TeaUtil.Common.Empty(regionId)) { regionId = "cn-hangzhou"; } if (!AlibabaCloud.TeaUtil.Common.Empty(network)) { if (AlibabaCloud.DarabonbaString.StringUtil.Contains(network, "internal")) { return "oss-" + regionId + "-internal.aliyuncs.com"; } else if (AlibabaCloud.DarabonbaString.StringUtil.Contains(network, "ipv6")) { return "" + regionId + "oss.aliyuncs.com"; } else if (AlibabaCloud.DarabonbaString.StringUtil.Contains(network, "accelerate")) { return "oss-" + network + ".aliyuncs.com"; } } return "oss-" + regionId + ".aliyuncs.com"; } public string GetHost(string endpointType, string bucketName, string endpoint) { if (AlibabaCloud.TeaUtil.Common.Empty(bucketName)) { return endpoint; } string host = "" + bucketName + "." + endpoint; if (!AlibabaCloud.TeaUtil.Common.Empty(endpointType)) { if (AlibabaCloud.DarabonbaString.StringUtil.Equals(endpointType, "ip")) { host = "" + endpoint + "/" + bucketName; } else if (AlibabaCloud.DarabonbaString.StringUtil.Equals(endpointType, "cname")) { host = endpoint; } } return host; } public async Task<string> GetHostAsync(string endpointType, string bucketName, string endpoint) { if (AlibabaCloud.TeaUtil.Common.Empty(bucketName)) { return endpoint; } string host = "" + bucketName + "." + endpoint; if (!AlibabaCloud.TeaUtil.Common.Empty(endpointType)) { if (AlibabaCloud.DarabonbaString.StringUtil.Equals(endpointType, "ip")) { host = "" + endpoint + "/" + bucketName; } else if (AlibabaCloud.DarabonbaString.StringUtil.Equals(endpointType, "cname")) { host = endpoint; } } return host; } public string GetAuthorization(string signatureVersion, string bucketName, string pathname, string method, Dictionary<string, string> query, Dictionary<string, string> headers, string ak, string secret, string regionId) { string sign = ""; if (!AlibabaCloud.TeaUtil.Common.IsUnset(signatureVersion)) { if (AlibabaCloud.DarabonbaString.StringUtil.Equals(signatureVersion, "v1")) { sign = GetSignatureV1(bucketName, pathname, method, query, headers, secret); return "OSS " + ak + ":" + sign; } if (AlibabaCloud.DarabonbaString.StringUtil.Equals(signatureVersion, "v2")) { sign = GetSignatureV2(bucketName, pathname, method, query, headers, secret); return "OSS2 AccessKeyId:" + ak + ",Signature:" + sign; } } string dateTime = AlibabaCloud.OpenApiUtil.Client.GetTimestamp(); dateTime = AlibabaCloud.DarabonbaString.StringUtil.Replace(dateTime, "-", "", null); dateTime = AlibabaCloud.DarabonbaString.StringUtil.Replace(dateTime, ":", "", null); headers["x-oss-date"] = dateTime; headers["x-oss-content-sha256"] = "UNSIGNED-PAYLOAD"; string onlyDate = AlibabaCloud.DarabonbaString.StringUtil.SubString(dateTime, 0, 8); string cred = "" + ak + "/" + onlyDate + "/" + regionId + "/oss/aliyun_v4_request"; sign = GetSignatureV4(bucketName, pathname, method, query, headers, onlyDate, regionId, secret); return "OSS4-HMAC-SHA256 Credential=" + cred + ", Signature=" + sign; } public async Task<string> GetAuthorizationAsync(string signatureVersion, string bucketName, string pathname, string method, Dictionary<string, string> query, Dictionary<string, string> headers, string ak, string secret, string regionId) { string sign = ""; if (!AlibabaCloud.TeaUtil.Common.IsUnset(signatureVersion)) { if (AlibabaCloud.DarabonbaString.StringUtil.Equals(signatureVersion, "v1")) { sign = await GetSignatureV1Async(bucketName, pathname, method, query, headers, secret); return "OSS " + ak + ":" + sign; } if (AlibabaCloud.DarabonbaString.StringUtil.Equals(signatureVersion, "v2")) { sign = await GetSignatureV2Async(bucketName, pathname, method, query, headers, secret); return "OSS2 AccessKeyId:" + ak + ",Signature:" + sign; } } string dateTime = AlibabaCloud.OpenApiUtil.Client.GetTimestamp(); dateTime = AlibabaCloud.DarabonbaString.StringUtil.Replace(dateTime, "-", "", null); dateTime = AlibabaCloud.DarabonbaString.StringUtil.Replace(dateTime, ":", "", null); headers["x-oss-date"] = dateTime; headers["x-oss-content-sha256"] = "UNSIGNED-PAYLOAD"; string onlyDate = AlibabaCloud.DarabonbaString.StringUtil.SubString(dateTime, 0, 8); string cred = "" + ak + "/" + onlyDate + "/" + regionId + "/oss/aliyun_v4_request"; sign = await GetSignatureV4Async(bucketName, pathname, method, query, headers, onlyDate, regionId, secret); return "OSS4-HMAC-SHA256 Credential=" + cred + ", Signature=" + sign; } public byte[] GetSignKey(string secret, string onlyDate, string regionId) { string temp = "aliyun_v4" + secret; byte[] res = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256Sign(onlyDate, temp); res = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes(regionId, res); res = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes("oss", res); res = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes("aliyun_v4_request", res); return res; } public async Task<byte[]> GetSignKeyAsync(string secret, string onlyDate, string regionId) { string temp = "aliyun_v4" + secret; byte[] res = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256Sign(onlyDate, temp); res = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes(regionId, res); res = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes("oss", res); res = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes("aliyun_v4_request", res); return res; } public string GetSignatureV4(string bucketName, string pathname, string method, Dictionary<string, string> query, Dictionary<string, string> headers, string onlyDate, string regionId, string secret) { byte[] signingkey = GetSignKey(secret, onlyDate, regionId); string objectName = "/"; Dictionary<string, string> queryMap = new Dictionary<string, string>(){}; if (!AlibabaCloud.TeaUtil.Common.Empty(pathname)) { List<string> paths = AlibabaCloud.DarabonbaString.StringUtil.Split(pathname, "?", 2); objectName = paths[0]; if (AlibabaCloud.TeaUtil.Common.EqualNumber(AlibabaCloud.DarabonbaArray.ArrayUtil.Size(paths), 2)) { List<string> subResources = AlibabaCloud.DarabonbaString.StringUtil.Split(paths[1], "&", null); foreach (var sub in subResources) { List<string> item = AlibabaCloud.DarabonbaString.StringUtil.Split(sub, "=", null); string key = item[0]; key = AlibabaCloud.DarabonbaEncodeUtil.Encoder.PercentEncode(key); key = AlibabaCloud.DarabonbaString.StringUtil.Replace(key, "+", "%20", null); string value = null; if (AlibabaCloud.TeaUtil.Common.EqualNumber(AlibabaCloud.DarabonbaArray.ArrayUtil.Size(item), 2)) { value = AlibabaCloud.DarabonbaEncodeUtil.Encoder.PercentEncode(item[1]); value = AlibabaCloud.DarabonbaString.StringUtil.Replace(value, "+", "%20", null); } // for go : queryMap[tea.StringValue(key)] = value queryMap[key] = value; } } } string canonicalizedUri = "/"; if (!AlibabaCloud.TeaUtil.Common.Empty(bucketName)) { canonicalizedUri = "/" + bucketName + objectName; } // for java: // String suffix = (!canonicalizedUri.equals("/") && canonicalizedUri.endsWith("/"))? "/" : ""; // canonicalizedUri = com.aliyun.openapiutil.Client.getEncodePath(canonicalizedUri) + suffix; canonicalizedUri = AlibabaCloud.OpenApiUtil.Client.GetEncodePath(canonicalizedUri); foreach (var queryKey in AlibabaCloud.DarabonbaMap.MapUtil.KeySet(query)) { string queryValue = null; if (!AlibabaCloud.TeaUtil.Common.Empty(query.Get(queryKey))) { queryValue = AlibabaCloud.DarabonbaEncodeUtil.Encoder.PercentEncode(query.Get(queryKey)); queryValue = AlibabaCloud.DarabonbaString.StringUtil.Replace(queryValue, "+", "%20", null); } queryKey = AlibabaCloud.DarabonbaEncodeUtil.Encoder.PercentEncode(queryKey); queryKey = AlibabaCloud.DarabonbaString.StringUtil.Replace(queryKey, "+", "%20", null); // for go : queryMap[tea.StringValue(queryKey)] = queryValue queryMap[queryKey] = queryValue; } string canonicalizedQueryString = BuildCanonicalizedQueryStringV4(queryMap); string canonicalizedHeaders = BuildCanonicalizedHeadersV4(headers); string payload = "UNSIGNED-PAYLOAD"; string canonicalRequest = "" + method + "\n" + canonicalizedUri + "\n" + canonicalizedQueryString + "\n" + canonicalizedHeaders + "\n\n" + payload; string hex = AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaEncodeUtil.Encoder.Hash(AlibabaCloud.TeaUtil.Common.ToBytes(canonicalRequest), "ACS4-HMAC-SHA256")); string scope = "" + onlyDate + "/" + regionId + "/oss/aliyun_v4_request"; string stringToSign = "OSS4-HMAC-SHA256\n" + headers.Get("x-oss-date") + "\n" + scope + "\n" + hex; byte[] signature = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes(stringToSign, signingkey); return AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(signature); } public async Task<string> GetSignatureV4Async(string bucketName, string pathname, string method, Dictionary<string, string> query, Dictionary<string, string> headers, string onlyDate, string regionId, string secret) { byte[] signingkey = await GetSignKeyAsync(secret, onlyDate, regionId); string objectName = "/"; Dictionary<string, string> queryMap = new Dictionary<string, string>(){}; if (!AlibabaCloud.TeaUtil.Common.Empty(pathname)) { List<string> paths = AlibabaCloud.DarabonbaString.StringUtil.Split(pathname, "?", 2); objectName = paths[0]; if (AlibabaCloud.TeaUtil.Common.EqualNumber(AlibabaCloud.DarabonbaArray.ArrayUtil.Size(paths), 2)) { List<string> subResources = AlibabaCloud.DarabonbaString.StringUtil.Split(paths[1], "&", null); foreach (var sub in subResources) { List<string> item = AlibabaCloud.DarabonbaString.StringUtil.Split(sub, "=", null); string key = item[0]; key = AlibabaCloud.DarabonbaEncodeUtil.Encoder.PercentEncode(key); key = AlibabaCloud.DarabonbaString.StringUtil.Replace(key, "+", "%20", null); string value = null; if (AlibabaCloud.TeaUtil.Common.EqualNumber(AlibabaCloud.DarabonbaArray.ArrayUtil.Size(item), 2)) { value = AlibabaCloud.DarabonbaEncodeUtil.Encoder.PercentEncode(item[1]); value = AlibabaCloud.DarabonbaString.StringUtil.Replace(value, "+", "%20", null); } // for go : queryMap[tea.StringValue(key)] = value queryMap[key] = value; } } } string canonicalizedUri = "/"; if (!AlibabaCloud.TeaUtil.Common.Empty(bucketName)) { canonicalizedUri = "/" + bucketName + objectName; } // for java: // String suffix = (!canonicalizedUri.equals("/") && canonicalizedUri.endsWith("/"))? "/" : ""; // canonicalizedUri = com.aliyun.openapiutil.Client.getEncodePath(canonicalizedUri) + suffix; canonicalizedUri = AlibabaCloud.OpenApiUtil.Client.GetEncodePath(canonicalizedUri); foreach (var queryKey in AlibabaCloud.DarabonbaMap.MapUtil.KeySet(query)) { string queryValue = null; if (!AlibabaCloud.TeaUtil.Common.Empty(query.Get(queryKey))) { queryValue = AlibabaCloud.DarabonbaEncodeUtil.Encoder.PercentEncode(query.Get(queryKey)); queryValue = AlibabaCloud.DarabonbaString.StringUtil.Replace(queryValue, "+", "%20", null); } queryKey = AlibabaCloud.DarabonbaEncodeUtil.Encoder.PercentEncode(queryKey); queryKey = AlibabaCloud.DarabonbaString.StringUtil.Replace(queryKey, "+", "%20", null); // for go : queryMap[tea.StringValue(queryKey)] = queryValue queryMap[queryKey] = queryValue; } string canonicalizedQueryString = await BuildCanonicalizedQueryStringV4Async(queryMap); string canonicalizedHeaders = await BuildCanonicalizedHeadersV4Async(headers); string payload = "UNSIGNED-PAYLOAD"; string canonicalRequest = "" + method + "\n" + canonicalizedUri + "\n" + canonicalizedQueryString + "\n" + canonicalizedHeaders + "\n\n" + payload; string hex = AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(AlibabaCloud.DarabonbaEncodeUtil.Encoder.Hash(AlibabaCloud.TeaUtil.Common.ToBytes(canonicalRequest), "ACS4-HMAC-SHA256")); string scope = "" + onlyDate + "/" + regionId + "/oss/aliyun_v4_request"; string stringToSign = "OSS4-HMAC-SHA256\n" + headers.Get("x-oss-date") + "\n" + scope + "\n" + hex; byte[] signature = AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA256SignByBytes(stringToSign, signingkey); return AlibabaCloud.DarabonbaEncodeUtil.Encoder.HexEncode(signature); } public string BuildCanonicalizedQueryStringV4(Dictionary<string, string> queryMap) { string canonicalizedQueryString = ""; if (!AlibabaCloud.TeaUtil.Common.IsUnset(queryMap)) { List<string> queryArray = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(queryMap); List<string> sortedQueryArray = AlibabaCloud.DarabonbaArray.ArrayUtil.AscSort(queryArray); string separator = ""; foreach (var key in sortedQueryArray) { canonicalizedQueryString = "" + canonicalizedQueryString + separator + key; if (!AlibabaCloud.TeaUtil.Common.Empty(queryMap.Get(key))) { canonicalizedQueryString = "" + canonicalizedQueryString + "=" + queryMap.Get(key); } separator = "&"; } } return canonicalizedQueryString; } public async Task<string> BuildCanonicalizedQueryStringV4Async(Dictionary<string, string> queryMap) { string canonicalizedQueryString = ""; if (!AlibabaCloud.TeaUtil.Common.IsUnset(queryMap)) { List<string> queryArray = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(queryMap); List<string> sortedQueryArray = AlibabaCloud.DarabonbaArray.ArrayUtil.AscSort(queryArray); string separator = ""; foreach (var key in sortedQueryArray) { canonicalizedQueryString = "" + canonicalizedQueryString + separator + key; if (!AlibabaCloud.TeaUtil.Common.Empty(queryMap.Get(key))) { canonicalizedQueryString = "" + canonicalizedQueryString + "=" + queryMap.Get(key); } separator = "&"; } } return canonicalizedQueryString; } public string BuildCanonicalizedHeadersV4(Dictionary<string, string> headers) { string canonicalizedHeaders = ""; List<string> headersArray = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(headers); List<string> sortedHeadersArray = AlibabaCloud.DarabonbaArray.ArrayUtil.AscSort(headersArray); foreach (var key in sortedHeadersArray) { string lowerKey = AlibabaCloud.DarabonbaString.StringUtil.ToLower(key); if (AlibabaCloud.DarabonbaString.StringUtil.HasPrefix(lowerKey, "x-oss-") || AlibabaCloud.DarabonbaString.StringUtil.Equals(lowerKey, "content-type") || AlibabaCloud.DarabonbaString.StringUtil.Equals(lowerKey, "content-md5")) { canonicalizedHeaders = "" + canonicalizedHeaders + key + ":" + AlibabaCloud.DarabonbaString.StringUtil.Trim(headers.Get(key)) + "\n"; } } return canonicalizedHeaders; } public async Task<string> BuildCanonicalizedHeadersV4Async(Dictionary<string, string> headers) { string canonicalizedHeaders = ""; List<string> headersArray = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(headers); List<string> sortedHeadersArray = AlibabaCloud.DarabonbaArray.ArrayUtil.AscSort(headersArray); foreach (var key in sortedHeadersArray) { string lowerKey = AlibabaCloud.DarabonbaString.StringUtil.ToLower(key); if (AlibabaCloud.DarabonbaString.StringUtil.HasPrefix(lowerKey, "x-oss-") || AlibabaCloud.DarabonbaString.StringUtil.Equals(lowerKey, "content-type") || AlibabaCloud.DarabonbaString.StringUtil.Equals(lowerKey, "content-md5")) { canonicalizedHeaders = "" + canonicalizedHeaders + key + ":" + AlibabaCloud.DarabonbaString.StringUtil.Trim(headers.Get(key)) + "\n"; } } return canonicalizedHeaders; } public string GetSignatureV1(string bucketName, string pathname, string method, Dictionary<string, string> query, Dictionary<string, string> headers, string secret) { string resource = ""; string stringToSign = ""; if (!AlibabaCloud.TeaUtil.Common.Empty(bucketName)) { resource = "/" + bucketName; } resource = "" + resource + pathname; string canonicalizedResource = BuildCanonicalizedResource(resource, query); string canonicalizedHeaders = BuildCanonicalizedHeaders(headers); stringToSign = "" + method + "\n" + canonicalizedHeaders + canonicalizedResource; return AlibabaCloud.DarabonbaEncodeUtil.Encoder.Base64EncodeToString(AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA1Sign(stringToSign, secret)); } public async Task<string> GetSignatureV1Async(string bucketName, string pathname, string method, Dictionary<string, string> query, Dictionary<string, string> headers, string secret) { string resource = ""; string stringToSign = ""; if (!AlibabaCloud.TeaUtil.Common.Empty(bucketName)) { resource = "/" + bucketName; } resource = "" + resource + pathname; string canonicalizedResource = await BuildCanonicalizedResourceAsync(resource, query); string canonicalizedHeaders = await BuildCanonicalizedHeadersAsync(headers); stringToSign = "" + method + "\n" + canonicalizedHeaders + canonicalizedResource; return AlibabaCloud.DarabonbaEncodeUtil.Encoder.Base64EncodeToString(AlibabaCloud.DarabonbaSignatureUtil.Signer.HmacSHA1Sign(stringToSign, secret)); } public string BuildCanonicalizedResource(string pathname, Dictionary<string, string> query) { Dictionary<string, string> subResourcesMap = new Dictionary<string, string>(){}; string canonicalizedResource = pathname; if (!AlibabaCloud.TeaUtil.Common.Empty(pathname)) { List<string> paths = AlibabaCloud.DarabonbaString.StringUtil.Split(pathname, "?", 2); canonicalizedResource = paths[0]; if (AlibabaCloud.TeaUtil.Common.EqualNumber(AlibabaCloud.DarabonbaArray.ArrayUtil.Size(paths), 2)) { List<string> subResources = AlibabaCloud.DarabonbaString.StringUtil.Split(paths[1], "&", null); foreach (var sub in subResources) { bool? hasExcepts = false; foreach (var excepts in _except_signed_params) { if (AlibabaCloud.DarabonbaString.StringUtil.Contains(sub, excepts)) { hasExcepts = true; } } if (!hasExcepts) { List<string> item = AlibabaCloud.DarabonbaString.StringUtil.Split(sub, "=", null); string key = item[0]; string value = null; if (AlibabaCloud.TeaUtil.Common.EqualNumber(AlibabaCloud.DarabonbaArray.ArrayUtil.Size(item), 2)) { value = item[1]; } // for go : subResourcesMap[tea.StringValue(key)] = value subResourcesMap[key] = value; } } } } List<string> subResourcesArray = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(subResourcesMap); List<string> newQueryList = subResourcesArray; if (!AlibabaCloud.TeaUtil.Common.IsUnset(query)) { List<string> queryList = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(query); newQueryList = AlibabaCloud.DarabonbaArray.ArrayUtil.Concat(queryList, subResourcesArray); } List<string> sortedParams = AlibabaCloud.DarabonbaArray.ArrayUtil.AscSort(newQueryList); string separator = "?"; foreach (var paramName in sortedParams) { if (AlibabaCloud.DarabonbaArray.ArrayUtil.Contains(_default_signed_params, paramName)) { canonicalizedResource = "" + canonicalizedResource + separator + paramName; if (!AlibabaCloud.TeaUtil.Common.IsUnset(query) && !AlibabaCloud.TeaUtil.Common.IsUnset(query.Get(paramName))) { canonicalizedResource = "" + canonicalizedResource + "=" + query.Get(paramName); } else if (!AlibabaCloud.TeaUtil.Common.IsUnset(subResourcesMap.Get(paramName))) { canonicalizedResource = "" + canonicalizedResource + "=" + subResourcesMap.Get(paramName); } } else if (AlibabaCloud.DarabonbaArray.ArrayUtil.Contains(subResourcesArray, paramName)) { canonicalizedResource = "" + canonicalizedResource + separator + paramName; if (!AlibabaCloud.TeaUtil.Common.IsUnset(subResourcesMap.Get(paramName))) { canonicalizedResource = "" + canonicalizedResource + "=" + subResourcesMap.Get(paramName); } } separator = "&"; } return canonicalizedResource; } public async Task<string> BuildCanonicalizedResourceAsync(string pathname, Dictionary<string, string> query) { Dictionary<string, string> subResourcesMap = new Dictionary<string, string>(){}; string canonicalizedResource = pathname; if (!AlibabaCloud.TeaUtil.Common.Empty(pathname)) { List<string> paths = AlibabaCloud.DarabonbaString.StringUtil.Split(pathname, "?", 2); canonicalizedResource = paths[0]; if (AlibabaCloud.TeaUtil.Common.EqualNumber(AlibabaCloud.DarabonbaArray.ArrayUtil.Size(paths), 2)) { List<string> subResources = AlibabaCloud.DarabonbaString.StringUtil.Split(paths[1], "&", null); foreach (var sub in subResources) { bool? hasExcepts = false; foreach (var excepts in _except_signed_params) { if (AlibabaCloud.DarabonbaString.StringUtil.Contains(sub, excepts)) { hasExcepts = true; } } if (!hasExcepts) { List<string> item = AlibabaCloud.DarabonbaString.StringUtil.Split(sub, "=", null); string key = item[0]; string value = null; if (AlibabaCloud.TeaUtil.Common.EqualNumber(AlibabaCloud.DarabonbaArray.ArrayUtil.Size(item), 2)) { value = item[1]; } // for go : subResourcesMap[tea.StringValue(key)] = value subResourcesMap[key] = value; } } } } List<string> subResourcesArray = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(subResourcesMap); List<string> newQueryList = subResourcesArray; if (!AlibabaCloud.TeaUtil.Common.IsUnset(query)) { List<string> queryList = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(query); newQueryList = AlibabaCloud.DarabonbaArray.ArrayUtil.Concat(queryList, subResourcesArray); } List<string> sortedParams = AlibabaCloud.DarabonbaArray.ArrayUtil.AscSort(newQueryList); string separator = "?"; foreach (var paramName in sortedParams) { if (AlibabaCloud.DarabonbaArray.ArrayUtil.Contains(_default_signed_params, paramName)) { canonicalizedResource = "" + canonicalizedResource + separator + paramName; if (!AlibabaCloud.TeaUtil.Common.IsUnset(query) && !AlibabaCloud.TeaUtil.Common.IsUnset(query.Get(paramName))) { canonicalizedResource = "" + canonicalizedResource + "=" + query.Get(paramName); } else if (!AlibabaCloud.TeaUtil.Common.IsUnset(subResourcesMap.Get(paramName))) { canonicalizedResource = "" + canonicalizedResource + "=" + subResourcesMap.Get(paramName); } } else if (AlibabaCloud.DarabonbaArray.ArrayUtil.Contains(subResourcesArray, paramName)) { canonicalizedResource = "" + canonicalizedResource + separator + paramName; if (!AlibabaCloud.TeaUtil.Common.IsUnset(subResourcesMap.Get(paramName))) { canonicalizedResource = "" + canonicalizedResource + "=" + subResourcesMap.Get(paramName); } } separator = "&"; } return canonicalizedResource; } public string BuildCanonicalizedHeaders(Dictionary<string, string> headers) { string canonicalizedHeaders = ""; string contentType = headers.Get("content-type"); if (AlibabaCloud.TeaUtil.Common.IsUnset(contentType)) { contentType = ""; } string contentMd5 = headers.Get("content-md5"); if (AlibabaCloud.TeaUtil.Common.IsUnset(contentMd5)) { contentMd5 = ""; } canonicalizedHeaders = "" + canonicalizedHeaders + contentMd5 + "\n" + contentType + "\n" + headers.Get("date") + "\n"; List<string> keys = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(headers); List<string> sortedHeaders = AlibabaCloud.DarabonbaArray.ArrayUtil.AscSort(keys); foreach (var header in sortedHeaders) { if (AlibabaCloud.DarabonbaString.StringUtil.Contains(AlibabaCloud.DarabonbaString.StringUtil.ToLower(header), "x-oss-") && !AlibabaCloud.TeaUtil.Common.IsUnset(headers.Get(header))) { canonicalizedHeaders = "" + canonicalizedHeaders + header + ":" + headers.Get(header) + "\n"; } } return canonicalizedHeaders; } public async Task<string> BuildCanonicalizedHeadersAsync(Dictionary<string, string> headers) { string canonicalizedHeaders = ""; string contentType = headers.Get("content-type"); if (AlibabaCloud.TeaUtil.Common.IsUnset(contentType)) { contentType = ""; } string contentMd5 = headers.Get("content-md5"); if (AlibabaCloud.TeaUtil.Common.IsUnset(contentMd5)) { contentMd5 = ""; } canonicalizedHeaders = "" + canonicalizedHeaders + contentMd5 + "\n" + contentType + "\n" + headers.Get("date") + "\n"; List<string> keys = AlibabaCloud.DarabonbaMap.MapUtil.KeySet(headers); List<string> sortedHeaders = AlibabaCloud.DarabonbaArray.ArrayUtil.AscSort(keys); foreach (var header in sortedHeaders) { if (AlibabaCloud.DarabonbaString.StringUtil.Contains(AlibabaCloud.DarabonbaString.StringUtil.ToLower(header), "x-oss-") && !AlibabaCloud.TeaUtil.Common.IsUnset(headers.Get(header))) { canonicalizedHeaders = "" + canonicalizedHeaders + header + ":" + headers.Get(header) + "\n"; } } return canonicalizedHeaders; } public string GetSignatureV2(string bucketName, string pathname, string method, Dictionary<string, string> query, Dictionary<string, string> headers, string secret) { return ""; } public async Task<string> GetSignatureV2Async(string bucketName, string pathname, string method, Dictionary<string, string> query, Dictionary<string, string> headers, string secret) { return ""; } } }