问题

使用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;]或迭代它,那么你会找到你想要的。它比其他东西更方便。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top