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