Asp.net - 空QueryString参数

时间:2008-12-30 14:20:29

标签: asp.net query-string

问题

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

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

我已尝试检查Request["foo"]以及Request.QueryString["foo"],我得到null。我还尝试使用List集合中的值填充QueryString,但正如我在下面提到的,它不包含值。

问题

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

注释

我发现here Request.QueryString.AllKeys包含null空白查询字符串参数。

[编辑]

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

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

6 个答案:

答案 0 :(得分:43)

您可以使用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)来获取没有值的参数名称。

答案 1 :(得分:8)

Request.ServerVariables["QUERY_STRING"]将以字符串形式返回查询字符串complete。然后使用Regex或IndexOf

进行搜索

答案 2 :(得分:7)

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

......究竟是什么问题?

如果你仍然想检查它的存在(尽管它没有值),试试这样的事情:

bool doesFooExist = Request.Url.AbsoluteUri.IndexOf("foo=") >= 0 ? true : false;

答案 3 :(得分:0)

Dreas是对的。变量“bar”有一个值,但foo没有。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

查询字符串可能是一个浪费的。如果你使用Request.Params [“”]或迭代它,那么你会找到你想要的。它比其他东西更方便。

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