我正在使用以下函数从URL
获取查询字符串的值 contact.aspx?PID=15&Lang=en-US
--- 作品
contact.aspx?PID=15&Lang=en-US
--- 失败
if (!string.IsNullOrEmpty(Helper.GetQueryStringValue("Lang")))
{
//Do somthing
}
public static String GetQueryStringValue(String qValue)
{
String value = String.Empty;
if (HttpContext.Current.Request.QueryString[qValue] != null)
{
value = HttpContext.Current.Request.QueryString[qValue].ToString();
}
return value;
}
当我在url中使用&
时,它会为querystring Lang
返回null值,当我使用&
时,它会起作用。
我无法理解为什么会发生这种情况
答案 0 :(得分:2)
它与编码或解码无关。
&&符号是查询字符串参数的分隔符,因此您在URL中实际拥有的是两个名称:PID
和amp;Lang
如果您更改代码以查找后者,那么''得到en-us
作为你的输出。
Response.Write(GetQueryStringValue("amp;Lang"));
解码URL无法正常工作,因为它尚未正确编码。正确编码的URL将是:
contact.aspx?PID%3d15%26amp%3bLang%3den-US
如果你有,你可以解码它,但它仍然不会得到你想要的,因为你仍然没有名为Lang
的名称;即使解码后它仍然是amp;Lang
此外,这完全不相关,但ToString()
函数中的GetQueryStringValue
是多余的。那条线可以简单地说是:
value = HttpContext.Current.Request.QueryString[qValue];
答案 1 :(得分:0)
这是因为&
实际上被解释为角色'&'而不是连接器..提供的查询字符串无效。
您可以尝试使用Server.UrlDecode(queryString)
解码/解析它。您可以尝试将所有&
替换为'%26',然后将其输入Server.UrlDecode
- 但,但不保证可以解决问题。
有关Server.UrlDecode
的详细信息,请参阅MSDN页面http://msdn.microsoft.com/en-us/library/6196h3wt(v=vs.110).aspx -
底线是queryString目前格式不正确。如果您可以控制代码以呈现网址,那么请始终使用&
而不是&
。 (例如:https://stackoverflow.com/a/829138/1155847)
答案 2 :(得分:-1)
您需要在尝试访问查询字符串变量之前解码URL ...
Server.UrlDecode(HttpContext.Current.Request.QueryString[qValue])
结帐MSDN http://msdn.microsoft.com/en-us/library/6196h3wt%28v=vs.110%29.aspx