我正在编写一个小型API,需要在请求中检查重复的密钥.有人可以推荐检查重复键的最佳方法.我知道我可以检查key.Value在字符串中的逗号,但是我有另一个问题,不允许在API请求中使用逗号.
//Does not compile- just for illustration private void convertQueryStringToDictionary(HttpContext context) { queryDict = new Dictionary<string,string>(); foreach (string key in context.Request.QueryString.Keys) { if (key.Count() > 0) //Error here- How do I check for multiple values? { context.Response.Write(string.Format("Uh-oh")); } queryDict.Add(key,context.Request.QueryString[key]); } }
解决方法
QueryString是一个NameValueCollection,它解释了为什么重复键值显示为逗号分隔列表(从
Add方法的文档):
If the specified key already exists in the target NameValueCollection
instance,the specified value is added to the existing comma-separated
list of values in the form “value1,value2,value3”.
所以,例如,给定这个查询字符串:q1 = v1& q2 = v2,v2& q3 = v3& q1 = v4,迭代键并检查值将显示:
Key: q1 Value:v1,v4 Key: q2 Value:v2,v2 Key: q3 Value:v3
由于您希望允许查询字符串值中的逗号,您可以使用GetValues方法,该方法将返回一个字符串数组,其中包含查询字符串中键的值.
static void Main(string[] args) { HttpRequest request = new HttpRequest("","http://www.stackoverflow.com","q1=v1&q2=v2,v2&q3=v3&q1=v4"); var queryString = request.QueryString; foreach (string k in queryString.Keys) { Console.WriteLine(k); int times = queryString.GetValues(k).Length; if (times > 1) { Console.WriteLine("Key {0} appears {1} times.",k,times); } } Console.ReadLine(); }
q1 Key q1 appears 2 times. q2 q3