查询字符串将不同的值返回到url中的实际值

时间:2014-05-08 06:02:33

标签: asp.net .net vb.net http

http://localhost:1079/BattleSimulator.aspx?userID=Unregistered_User&Troops=1111%1111%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0!1111%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0&Research=10%10%10%10%10%10%0!10%10%10%10%10%10%0&Sanctuary=0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0!0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0&Inventory=False%False%False%False%False%False!False%False%False%False%False%False&other=5!0&RNG=0&Dragons=-1%-1%-1%-1!-1%-1%-1%-1&BattleArts=0%0%0!0%0%0&Kaizer=2310000%1510000%0%15867000%910000%875!5011000%2810000%3158%182972948%2810000%803

^这是传递到服务器上的原始查询,

但是这在服务器上以非常不同的方式解析

例: http://prntscr.com/3h90fs

http://prntscr.com/3h90o2

返回的字符串
Extention.QueryString("Troops")

是“111111%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0 %0%0%0%0%0%0%0%0%0!1111%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0 %0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0"

为什么会这样?这是一个错误吗?

2 个答案:

答案 0 :(得分:2)

有许多字符是保留的,不能在查询字符串中使用。 %就是其中之一 您必须对字符串进行编码以确保它将被正确解码为服务器中的相同字符串。

在C#中,可以这样做:

HttpContext.Current.Server.UrlEncode(destinationURL);

答案 1 :(得分:1)

为什么会这样?

  

因为在您的值之间添加了任何(某些)空格(白色字符)。

这是一个错误吗?

  

不。这不是一个错误。

解。

  

在发送查询字符串之前,您需要使用 Trim() 或在查询字符串值中使用 Replace(" ","") 删除空值

查看此链接

Get Query String value containing spaces

Passing in a querystring with a space?

http://blogfornet.com/tag/how-to-use-space-in-url-query-string/

Request.QueryString giving me space instead of + sign