Asp.net - 空QueryString参数
-
03-07-2019 - |
题
问题
使用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
,用于空白查询字符串参数。
[编辑]
如下所述 James 和 Dreas 一个用于解析原始URL的正则表达式可能是最好的(也可能是唯一的)方法。
Regex.IsMatch(Request.RawUrl, "[?&]thumb([&=]|$)")
解决方案
您可以使用 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)
来获取没有值的参数名称。
其他提示
Request.ServerVariables [&quot; QUERY_STRING&quot;]
将以字符串形式返回查询字符串complete。然后使用Regex或IndexOf
你得到null,因为 foo
参数没有值。
......究竟是什么问题?
如果你仍然想检查它的存在(尽管它没有值),试试这样的事情:
bool doesFooExist = Request.Url.AbsoluteUri.IndexOf("foo=") >= 0 ? true : false;
Dreas是对的。可变“条形”有一个值,但foo没有。
QueryString [&quot; Bar&quot;]将返回3,因为它具有与变量Bar关联的值3。但是,Foo将返回null,因为它们没有值,当您在变量或键上调用QueryString时,您正在查询值,而不是键,因此这就是您返回null的原因。
查询字符串可能是一个浪费的。如果你使用Request.Params [&quot;&quot;]或迭代它,那么你会找到你想要的。它比其他东西更方便。
如果您需要任何帮助,请告诉我。