c# – 在Querystring / Post / Get请求中检查重复键的最佳方法是什么?

前端之家收集整理的这篇文章主要介绍了c# – 在Querystring / Post / Get请求中检查重复键的最佳方法是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写一个小型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
原文链接:https://www.f2er.com/csharp/97871.html

猜你在找的C#相关文章