QueryString总是在server.UrlDecode之后返回null

时间:2014-02-03 06:11:03

标签: c# asp.net asp.net-webpages

我的网页网址非常简单EmailToFriend.aspx?PID=5&Lang=en-US

    string _pid= Server.UrlDecode(Request.QueryString["PID"]);
    string _lang = Server.UrlDecode(Request.QueryString["Lang"]);

结果

_pid=5
_lang= null

我正在尝试获取QueryStringPID的{​​{1}}值,但是当它存在于url中时,它会返回null值,即= en-US

调试时我注意到它为下面的代码行显示了Lang的网址

PID=5&amp%3bLang=en-US

我不确定有什么问题,以及为什么显示string _lang = Server.UrlDecode(Request.QueryString["Lang"]);来代替%3b

如何解决此问题,以便获取QueryString ;

的值

如果我在我的网址中仅使用lang,那么它可以正常使用&问题只会在我编码url&尝试解码它

文章参考http://msdn.microsoft.com/en-us/library/6196h3wt%28v=vs.110%29.aspx

对我不起作用..

1 个答案:

答案 0 :(得分:1)

首先,来自Wikipedia:查询字符串是包含要传递给Web应用程序的数据的(URL)的一部分,它的编码如下:

  

field1=value1&field2=value2&field3=value3...

  • 查询字符串由一系列字段值对组成。
  • 在每对中,字段名称和值之间用等号'='分隔。
  • 系列对由&符号'&' ...
  • 分隔

因此,如果你有一个网址如下:

  

EmailToFriend.aspx?PID=5&Lang=en-US

您有一个包含两个字段值对的查询字符串,以&符号('&')分隔:

  

"PID" => "5""amp;Lang" => "en-US"

...

现在,回到你的问题:

  1.   

    我正在尝试获取QueryStringPID的{​​{1}}值,但是当它存在于url中时,它会返回null值,即= en-US

    Lang始终返回null的原因是,qiven网址中不存在该密钥,而密钥Lang的值为amp;Lang。您可以使用以下代码验证这一点:

    en-US
  2.   

    如何解决此问题,以便获取QueryString string _amplang = Server.UrlDecode(Request.QueryString["amp;Lang"]);

    的值

    你自己基本上已经回答了这个问题。它通过修复您的URL并使用正确形式的查询字符串:lang

  3.   

    文章参考http://msdn.microsoft.com/en-us/library/6196h3wt%28v=vs.110%29.aspx   对我不起作用..

    它确实有效,但不幸的是你做错了。 &符号(EmailToFriend.aspx?PID=5&Lang=en-US)的URL编码值为'&'而非%26。另一方面,&符号(&)的 HTML编码值为'&'。您可能正在尝试对HTML编码的值进行URL解码。

    例如,假设您有以下网址:

    &

    如果您运行以下代码:

    EmailToFriend.aspx?PID=5&Lang=en-US&Url=EmailToFriend.aspx%3fPID%3d5%26Lang%3den-US

    您将拥有以下值:

    string _pid= Server.UrlDecode(Request.QueryString["PID"]);
    string _lang = Server.UrlDecode(Request.QueryString["Lang"]);
    string _url = Server.UrlDecode(Request.QueryString["Url"]);
    

    从查询字符串中正确解码_pid=5 _lang= en-US _url = EmailToFriend.aspx?PID=5&Lang=en-US 值。