示例#1
0
        /// <summary>
        /// Parses a query string from a URL to a QueryParamCollection dictionary.
        /// </summary>
        /// <param name="queryString">The query string to parse.</param>
        /// <returns></returns>
        public static QueryParamCollection Parse(string queryString)
        {
            var result = new QueryParamCollection();

            if (string.IsNullOrEmpty(queryString))
            {
                return(result);
            }

            queryString = queryString.TrimStart('?').Split('?').Last();

            var pairs = (
                from kv in queryString.Split('&')
                let pair = kv.Split('=')
                           let key = pair[0]
                                     let value = pair.Length >= 2 ? Url.DecodeQueryParamValue(pair[1]) : ""
                                                 group value by key into g
                                                 select new { Key = g.Key, Values = g.ToArray() });

            foreach (var g in pairs)
            {
                if (g.Values.Length == 1)
                {
                    result.Add(g.Key, g.Values[0]);
                }
                else
                {
                    result.Add(g.Key, g.Values);
                }
            }

            return(result);
        }
示例#2
0
 /// <summary>
 /// Creates a new instance of a query parameter. Allows specifying whether string value provided has
 /// already been URL-encoded.
 /// </summary>
 public QueryParameter(string name, string value, bool isEncoded)
 {
     Name = name;
     if (isEncoded)
     {
         _encodedValue = value as string;
         _value        = Url.DecodeQueryParamValue(_encodedValue);
     }
     else
     {
         Value = value;
     }
 }
示例#3
0
 /// <summary>
 /// Creates a new instance of a query parameter. Allows specifying whether string value provided has
 /// already been URL-encoded.
 /// </summary>
 public QueryParameter(string name, object value, bool isEncoded = false)
 {
     Name = name;
     if (isEncoded && value != null)
     {
         _encodedValue = value as string;
         _value        = Url.DecodeQueryParamValue(_encodedValue);
     }
     else
     {
         Value = value;
     }
 }