public async Task ModifyRequestAsync()

in alibabacloud-gateway-sls/csharp/core/Client.cs [168:264]


        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 project = hostMap.Get("project");
            AlibabaCloud.GatewaySpi.Models.InterceptorContext.InterceptorContextConfiguration config = context.Configuration;
            Aliyun.Credentials.Client credential = request.Credential;
            Aliyun.Credentials.Models.CredentialModel credentialModel = await credential.GetCredentialAsync();
            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;
            }
            string signatureVersion = AlibabaCloud.TeaUtil.Common.DefaultString(request.SignatureVersion, "v1");
            string finalCompressType = await GetFinalRequestCompressTypeAsync(request.Action, request.Headers);
            string contentHash = "";
            // get body bytes
            byte[] bodyBytes = null;
            if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Body))
            {
                if (AlibabaCloud.DarabonbaString.StringUtil.Equals(request.ReqBodyType, "json") || AlibabaCloud.DarabonbaString.StringUtil.Equals(request.ReqBodyType, "formData"))
                {
                    request.Headers["content-type"] = "application/json";
                    string bodyStr = AlibabaCloud.TeaUtil.Common.ToJSONString(request.Body);
                    bodyBytes = AlibabaCloud.TeaUtil.Common.ToBytes(bodyStr);
                }
                else if (AlibabaCloud.DarabonbaString.StringUtil.Equals(request.ReqBodyType, "binary"))
                {
                    // content-type: application/octet-stream
                    bodyBytes = AlibabaCloud.TeaUtil.Common.AssertAsBytes(request.Body);
                }
            }
            // get body raw size
            string bodyRawSize = "0";
            string rawSizeRef = request.Headers.Get("x-log-bodyrawsize");
            // for php bug, Argument #1 ($value) could not be passed by reference
            if (!AlibabaCloud.TeaUtil.Common.IsUnset(rawSizeRef))
            {
                bodyRawSize = rawSizeRef;
            }
            else if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Body))
            {
                bodyRawSize = "" + AlibabaCloud.GatewaySls_Util.Client.BytesLength(bodyBytes);
            }
            // compress if needed, and set body and hash
            if (!AlibabaCloud.TeaUtil.Common.IsUnset(request.Body))
            {
                if (!AlibabaCloud.TeaUtil.Common.Empty(finalCompressType))
                {
                    byte[] compressed = AlibabaCloud.GatewaySls_Util.Client.Compress(bodyBytes, finalCompressType);
                    bodyBytes = compressed;
                }
                contentHash = await MakeContentHashAsync(bodyBytes, signatureVersion);
                request.Stream = TeaCore.BytesReadable(bodyBytes);
            }
            string host = await GetHostAsync(config.Network, project, config.Endpoint);
            request.Headers = TeaConverter.merge<string>
            (
                new Dictionary<string, string>()
                {
                    {"accept", "application/json"},
                    {"host", host},
                    {"user-agent", request.UserAgent},
                    {"x-log-apiversion", "0.6.0"},
                },
                request.Headers
            );
            request.Headers["x-log-bodyrawsize"] = bodyRawSize;
            await SetDefaultAcceptEncodingAsync(request.Action, request.Headers);
            await BuildRequestAsync(context);
            // move param in path to query
            if (AlibabaCloud.DarabonbaString.StringUtil.Equals(signatureVersion, "v4"))
            {
                if (AlibabaCloud.TeaUtil.Common.Empty(contentHash))
                {
                    contentHash = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";
                }
                string date = await GetDateISO8601Async();
                request.Headers["x-log-date"] = date;
                request.Headers["x-log-content-sha256"] = contentHash;
                request.Headers["authorization"] = await GetAuthorizationV4Async(context, date, contentHash, accessKeyId, accessKeySecret);
                return ;
            }
            if (!AlibabaCloud.TeaUtil.Common.Empty(accessKeyId))
            {
                request.Headers["x-log-signaturemethod"] = "hmac-sha256";
            }
            request.Headers["date"] = AlibabaCloud.TeaUtil.Common.GetDateUTCString();
            request.Headers["content-md5"] = contentHash;
            request.Headers["authorization"] = await GetAuthorizationAsync(request.Pathname, request.Method, request.Query, request.Headers, accessKeyId, accessKeySecret);
        }