Esempio n. 1
0
        protected void CanonicalizeQuery()
        {
            String queryString = Url.Query.TrimStart('?');

            if (queryString == "")
            {
                //this.CanonicalQuery = "";
                return;
            }

            List <String> lParams             = queryString.Split('&').ToList();
            Dictionary <String, String[]> dic = new Dictionary <String, String[]>(lParams.Count);

            foreach (String sParam in lParams)
            {
                String[] paramArr   = sParam.Split('=');
                String   paramName  = paramArr[0];
                String   paramValue = paramArr[1];

                String[] valArray;
                if (!dic.Keys.Contains(paramName))
                {
                    valArray    = new String[1];
                    valArray[0] = paramValue;
                    dic.Add(paramName, valArray);
                }
                else
                {
                    String[] ExistingValues;
                    dic.TryGetValue(paramName, out ExistingValues);


                    var newValArray = new String[ExistingValues.Length + 1];
                    ExistingValues.CopyTo(newValArray, 0);
                    newValArray[newValArray.Length - 1] = paramValue;
                    dic[paramName] = newValArray.OrderBy(key => key).ToArray();
                }
            }
            SortedDictionary <String, String[]> sDic = new SortedDictionary <String, String[]>(dic);

            //ignore jwt
            sDic.Remove("jwt");
            //urlencode keys
            //urlencode values
            //sort keys
            //group same params by ,
            List <String> lOutQuery = new List <String>();

            foreach (KeyValuePair <String, String[]> par in sDic)
            {
                String sOutQuery = "";
                sOutQuery += HttpUtility.UrlPathEncode(par.Key);
                sOutQuery += "=";
                sOutQuery += HttpUtility.UrlPathEncode(String.Join(",", par.Value));
                lOutQuery.Add(sOutQuery);
            }
            this.CanonicalQuery = String.Join <String>("&", lOutQuery);
        }
        IDictionary <object, object> GuardExistingValueList(string name)
        {
            IDictionary <object, object> valueList;

            if (!ExistingValues.TryGetValue(name, out valueList))
            {
                ExistingValues.Add(name, valueList = new Dictionary <object, object>());
            }
            return(valueList);
        }