c#如何检查QueryString Values count是否与key的数量具有相同的值

时间:2011-11-15 21:48:07

标签: c# dictionary

这是我的问题:

如果我的网址有QueryString ?asdasdafa,我可以使用以下网址处理:if(HttpContext.Current.Request.QueryString.HasKeys())

但是如果我的url有QueryString ?asdasasfasdas&brand=Sony,那么它会因null异常而失败,因为它实际上有一个键,而另一个键没有。有没有一种简单的方法来检查

if(HttpContext.Current.Request.QueryString.KeysCount ==
HttpContext.Current.Request.QuesryString.ValuesCount))

4 个答案:

答案 0 :(得分:4)

我认为你不需要这样做,做一个简单的空检查就足够了

if(Request.QueryString["asdasdafa"]==null)
{
   // value missing
}

asdasdafa甚至不包含在QueryString中作为其中一个键的事实不会使您的应用程序抛出异常。

修改

根据评论,您可以按照以下方式浏览当前的键:

foreach (var item in Request.QueryString.AllKeys)
{
   if (Request.QueryString[item] == null)
                //value missing

}

答案 1 :(得分:1)

当我运行你的第二个例子时,HttpContext.Current.Request.QueryString.HasKeys()对我没有失败,asdasasfasdas是我得到的第一个值,但其关键是null。您可以通过

检查密钥是否为空
NameValueCollection nvc = Context.Request.QueryString;
if (nvc.GetKey(0) == null){}

答案 2 :(得分:0)

我不确定HasKeys是否可以处理,如果没有,编写自己的扩展方法/覆盖HasKeys()怎么样?阅读该方法中的查询字符串并将其拆分为&然后再次使用=在第一个拆分结果的每个项目上。然后返回是或否

答案 3 :(得分:0)

我没有对此进行测试,因此我不知道它是否有效,但您可以尝试检查这些计数:

int keys = Request.QueryString.Keys.Count;
int args = Request.QueryString.Count;

if (keys != args) ...