使用&时,Querystring返回null而不是&来自URL

时间:2014-01-30 13:05:54

标签: c# html asp.net

我正在使用以下函数从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值,当我使用&时,它会起作用。

我无法理解为什么会发生这种情况

3 个答案:

答案 0 :(得分:2)

它与编码或解码无关。

&&符号是查询字符串参数的分隔符,因此您在URL中实际拥有的是两个名称:PIDamp;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