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)); }
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); }
/// <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)); }