public async Task ModifyRequestAsync()

in alibabacloud-gateway-pds/csharp/core/Client.cs [154:271]


        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);
                    }
                }
            }
        }