using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; namespace ln.http { public class QueryStringParameters : IDictionary { Dictionary parameters = new Dictionary(); public QueryStringParameters(String query) { if (query.StartsWith("?")) query = query.Substring(1); String[] pairs = query.Split(new char[] { '&' }, StringSplitOptions.RemoveEmptyEntries); foreach (String pair in pairs) { String[] kv = pair.Split(new char[] { '=' }, 2, StringSplitOptions.RemoveEmptyEntries); string key = Uri.UnescapeDataString(kv[0].Replace('+',' ')); string value = kv.Length == 2 ? Uri.UnescapeDataString(kv[1].Replace('+',' ')) : ""; if (!key.Equals(String.Empty)){ parameters[key] = value; } } } public string this[string key] { get => parameters[key]; set => throw new NotImplementedException(); } public ICollection Keys => parameters.Keys; public ICollection Values => parameters.Values; public int Count => parameters.Count; public bool IsReadOnly => true; public void Add(string key, string value) => throw new NotImplementedException(); public void Add(KeyValuePair item) => throw new NotImplementedException(); public void Clear() => throw new NotImplementedException(); public bool Remove(string key) => throw new NotImplementedException(); public bool Remove(KeyValuePair item) => throw new NotImplementedException(); public bool Contains(KeyValuePair item) => parameters.Contains(item); public bool ContainsKey(string key) => parameters.ContainsKey(key); public void CopyTo(KeyValuePair[] array, int arrayIndex) => ((IDictionary)parameters).CopyTo(array, arrayIndex); public IEnumerator> GetEnumerator() => parameters.GetEnumerator(); public bool TryGetValue(string key, out string value) => parameters.TryGetValue(key, out value); IEnumerator IEnumerable.GetEnumerator() => parameters.GetEnumerator(); public string GetValue(string key,string defaultValue) { if (!ContainsKey(key)) return defaultValue; return parameters[key]; } public override string ToString() { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append("[Query"); foreach (String key in parameters.Keys){ stringBuilder.AppendFormat(" {0}={1}", key, parameters[key]); } stringBuilder.Append("]"); return stringBuilder.ToString(); } } }