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