26

问题

foo使用 asp.net 在以下 url 的查询字符串中检查参数的正确方法是什么?这甚至可能吗?

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

我已经尝试过检查Request["foo"]Request.QueryString["foo"]并且我都得到null了。我还尝试使用集合List中的值填充 a,QueryString但正如我在下面提到的,它不包括该值。

问题

我知道没有价值,但不应该Request["foo"]返回空字符串而不是null? 有没有办法找出查询字符串键是否存在,即使它没有值?

笔记

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

[编辑]

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

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

6 回答 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)来获取没有值的参数名称。

于 2010-08-29T21:58:22.880 回答
9

Request.ServerVariables["QUERY_STRING"]将完整的查询字符串作为字符串返回。然后使用 Regex 或 IndexOf 搜索它

于 2008-12-30T14:30:14.927 回答
7

你得到 null 因为foo参数没有值。

...到底是什么问题?

如果您仍想检查它是否存在(尽管它缺少值),请尝试以下操作:

bool doesFooExist = Request.Url.AbsoluteUri.IndexOf("foo=") >= 0 ? true : false;
于 2008-12-30T14:23:03.550 回答
0

德里亚斯是正确的。变量“bar”有一个值,但 foo 没有。

于 2008-12-30T14:26:37.397 回答
0

QueryString["Bar"] 将返回 3,因为它具有与变量 Bar 关联的值 3。但是, Foo 将返回 null,因为它们没有值,并且当您在变量或键上调用 QueryString 时,您正在查询值,而不是键,这就是您返回 null 的原因。

于 2008-12-30T14:57:39.317 回答
0

查询字符串可能是一种浪费。如果您使用 Request.Params[""] 或对其进行迭代,那么您将找到您想要的。它真的比其他东西方便。

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

于 2011-12-05T06:55:07.577 回答