in alibabacloud-gateway-oss/csharp/core/Client.cs [1051:1121]
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;
}