C#如何检查QueryString值的数量是否与键的数量相同

3

我有一个问题:

如果我的网址带有查询字符串?asdasdafa,我可以使用以下代码处理:if(HttpContext.Current.Request.QueryString.HasKeys())

但是,如果我的网址带有查询字符串?asdasasfasdas&brand=Sony,那么它将因为实际上有一个键而失败,并且另一个键没有。有没有一种简单的方法来检查此情况?

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

在你的第二个例子中,asdasasfasdas&brand 被解释为键。伪代码完全没有帮助。 - Oded
是的,这个键没有值,所以它失败了。如果我能检查值的数量是否等于键的数量,我想我就没问题了。 - bobek
但是在你的例子中,Request.QueryString["asdasasfasdas&brand"] 的值是 Sony。然而,没有 brand 键。 - Oded
是谁生成了这样的密钥?也许在生成器端进行修复会更有价值? - sll
如果爬虫跟随这样的链接,它就会被放置在某个地方。检查一下你的网站 - 也许你不小心把它放在了某个地方。 - Oded
这是与Facebook相关的内容,类似于fb_akjg_oier或其他类似的东西。 - bobek
4个回答

4

我认为你不需要这样做,只需进行简单的空值检查即可。

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

事实上,即使asdasdafa在QueryString中没有作为其中一个键,也不会导致您的应用程序抛出异常。 编辑 基于评论,你可以按照以下方式遍历存在的键:
foreach (var item in Request.QueryString.AllKeys)
{
   if (Request.QueryString[item] == null)
                //value missing

}

我不知道它的名字是什么。由于某种原因,爬虫正在执行那些奇怪的键。 - bobek
@bobek:检查一下我的修改。这样可以吗?你可以编写一个小方法,根据某个值是否缺失来返回truefalse - Icarus

1
当我运行你的第二个示例时,HttpContext.Current.Request.QueryString.HasKeys() 对我来说并没有失败,而且asdasasfasdas是我得到的第一个值,但它的键是null。你可以通过检查键是否为null来进行验证。
NameValueCollection nvc = Context.Request.QueryString;
if (nvc.GetKey(0) == null){}

那并没有回答问题。 - Oded

0

我不确定HasKeys是否能够处理这个问题,如果不能,你可以考虑编写自己的扩展方法或覆盖HasKeys()方法。在该方法中读取查询字符串并将其使用&分割,然后再对第一个分割结果的每个项使用=进行分割。最后返回Yes或No。


0

我没有测试过,所以不知道它是否有效,但你可以尝试根据这些计数进行检查:

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

if (keys != args) ...

好主意!但是它不起作用:( 刚刚测试过。Request.QueryString.Keys.Count总是等于Request.QueryString.Count - Icarus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接