public string BuildCanonicalizedResource()

in alibabacloud-gateway-oss/csharp/core/Client.cs [979:1049]


        public string BuildCanonicalizedResource(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;
        }