空的QueryString参数

27

问题

如何在使用ASP.NET时检查以下URL查询字符串中的foo参数,这个过程是否可行?

http://example.com?bar=3&foo

我已经尝试过检查Request["foo"]Request.QueryString["foo"],但两者都返回null。我还尝试用QueryString集合中的值填充一个List,但正如我在下面提到的那样,它不包括该值。

问题

我知道没有这个值,但是Request["foo"]应该返回空字符串而不是null,对吗?有没有一种方法可以找出查询字符串键是否存在,即使它没有值?

注释

我在这里发现Request.QueryString.AllKeys包括空查询字符串参数的null

[编辑]

正如JamesDreas在下面所述的那样,使用正则表达式来解析原始url可能是最好(也可能是唯一)的方法。

Regex.IsMatch(Request.RawUrl, "[?&]thumb([&=]|$)")

检查查询字符串是否存在但为空有什么意义呢?它的值(实际上是缺少值)同样无用。 - Andreas Grech
1
@Dreas,我认为这里有一个隐含的“=true”(而完全没有foo参数则意味着“foo=false”)。 - James Curran
bool doesFooExist = Request.Url.AbsoluteUri.IndexOf("foo=") >= 0 ? true : false; //即使没有值,也将返回true - Andreas Grech
6个回答

45
您可以将 null 用作 NameValueCollection 的键,它会为您提供一个以逗号分隔的参数名称列表,这些参数名称没有值。
对于http://example.com?bar=3&foo,您需要使用Request.QueryString[null] ,将会检索到foo
如果有超过一个无值的参数名,则会返回一个以逗号分隔的值。
对于http://example.com?bar=3&foo&test,您将获得foo,test 作为值。
更新: 实际上,您可以使用Request.QueryString.GetValues(null) 来获取没有值的参数名称。

我想晚点做也比不做好... :-) - joelvh

9

Request.ServerVariables["QUERY_STRING"]会作为一个字符串返回完整的查询字符串。然后可以使用正则表达式或IndexOf来搜索它。


7
你得到了null,是因为foo参数没有任何值。具体的问题是什么呢?如果你仍想检查它是否存在(虽然它没有值),可以尝试像这样做:
bool doesFooExist = Request.Url.AbsoluteUri.IndexOf("foo=") >= 0 ? true : false;

我想检查查询字符串键值,即使它没有值。我已经相应地更新了问题。 - brad

0
Dreas 是正确的。变量 "bar" 有一个值,但 foo 没有。

对,foo 没有值。但是,除了在原始 URL 中找不到 foo 的引用之外,我找不到其他任何关于 foo 的引用。空白参数仍然是一个参数。 - brad

0

QueryString["Bar"]会返回3,因为变量Bar与值3相关联。然而,Foo将返回null,因为没有值,当您在变量或键上调用QueryString时,您正在查询值,而不是键,这就是为什么返回null的原因。


0

查询字符串可能是浪费的。如果您使用Request.Params [“”]或迭代它,那么您将找到所需的内容。它比其他方法更方便。

如果您需要任何帮助,请告诉我。


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