示例#1
0
        public static string CreateQueryStringFromDic(this ISimpleQueryString simpleQueryString, IDictionary <string, string> items, bool autoAppendQuestionMark)
        {
            var nvc = new NameValueCollection();

            if (items != null)
            {
                foreach (var item in items)
                {
                    nvc.Add(item.Key, item.Value);
                }
            }
            return(simpleQueryString.CreateQueryString(nvc, autoAppendQuestionMark));
        }
示例#2
0
        public static IDictionary <string, string> ParseQueryStringToDic(this ISimpleQueryString simpleQueryString, string queryString)
        {
            var dic = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase);
            var nvc = simpleQueryString.ParseQueryString(queryString);

            if (nvc == null || nvc.Count == 0)
            {
                return(dic);
            }

            foreach (var key in nvc.AllKeys)
            {
                dic.Add(key, nvc[key]);
            }
            return(dic);
        }
示例#3
0
        /// <summary>
        /// CreateQueryStringFromObject
        /// </summary>
        /// <param name="simpleQueryString"></param>
        /// <param name="obj"></param>
        /// <param name="autoAppendQuestionMark"></param>
        /// <param name="includeNames">如果为空,则包含全部</param>
        /// <returns></returns>
        public static string CreateQueryStringFromObject(this ISimpleQueryString simpleQueryString, object obj, bool autoAppendQuestionMark, IEnumerable <string> includeNames = null)
        {
            if (obj == null)
            {
                throw new ArgumentNullException(nameof(obj));
            }

            if (obj.GetType().IsPrimitive)
            {
                //简单类型
                throw new ArgumentException("不支持简单类型");
            }

            var nvc        = new NameValueCollection();
            var properties = obj.GetType().GetProperties()
                             .Where(x => x.CanRead)
                             .ToDictionary(x => x.Name, x => x.GetValue(obj, null));

            // Get names for all IEnumerable properties (excl. string)
            var multiValueKeys = properties
                                 .Where(x => !(x.Value is string) && x.Value is IEnumerable)
                                 .Select(x => x.Key)
                                 .ToList();

            foreach (var property in properties)
            {
                if (includeNames != null)
                {
                    if (!includeNames.Contains(property.Key, StringComparer.OrdinalIgnoreCase))
                    {
                        continue;
                    }
                }

                if (multiValueKeys.Contains(property.Key))
                {
                    AddMultiValues(property, properties, nvc);
                }
                else
                {
                    nvc.Add(property.Key, property.Value == null ? string.Empty : property.Value.ToString());
                }
            }
            return(simpleQueryString.CreateQueryString(nvc, autoAppendQuestionMark));
        }