我对这种情况感到难过。基本上我有一个传递给aspx页面的URL然后我尝试从URL获取查询字符串,但是当我尝试从URL中获取查询字符串时它会省略'+'并将其替换为空格。
My URL = http://localhost:3872/Test.aspx?mt=jan1TNIixxA1+8tl/0vLLg2PPGq0vMOLEhFQNuG4AJU12VMZpnWTrgar82K5UlXatQT9E9EAUet+q7rq7FoTJf+S2JnSbIptgJDY1EZwRPJDTROktfu5zy25oydmSHB6a4oZetV5mI3s+0R7vW8I0S9d765RHdYU2xkRuojHYZU=
Request["mt"] =jan1TNIixxA1 8tl/0vLLg2PPGq0vMOLEhFQNuG4AJU12VMZpnWTrgar82K5UlXatQT9E9EAUet q7rq7FoTJf S2JnSbIptgJDY1EZwRPJDTROktfu5zy25oydmSHB6a4oZetV5mI3s 0R7vW8I0S9d765RHdYU2xkRuojHYZU=
正如您所看到的,这两个字符串是不同的。
我认为这是字符串转换的对象,但这似乎不是这种情况,因为对象的值在转换之前省略了'+'。
可以做些什么来避免这个字符替换(我想尝试避免字符串操作)
这也可能是什么原因?
答案 0 :(得分:1)
您可以使用
MyUrl = MyUrl.Replace("+",@"%2B");
问题在于' +'如果使用httprequest,则字符将转换为空格。如果将其转换为十六进制值,则可以毫无问题地传递它。
答案 1 :(得分:1)
您应该使用HttpUtility.UrlEncode生成参数值。目前看来你使用的是base64编码,这对于查询参数来说不是最佳的。
答案 2 :(得分:1)
使用此:
mt=encodeURIComponent(mt);//if mt be --> jan1TNIixxA1+8tl/0vLLg2PPGq0vMOLEhFQNuG4AJU12VMZpnWTrgar82K5UlXatQT9E9EAUet+q7rq7FoTJf+S2JnSbIptgJDY1EZwRPJDTROktfu5zy25oydmSHB6a4oZetV5mI3s+0R7vW8I0S9d765RHdYU2xkRuojHYZU=
Response.Redirect("Test.aspx?"+mt);
这将对您的网址进行编码,之后“+”将转换为“%2B”,如果您想要读取已编码的网址,则不会将其转换为空格。
来自here
答案 3 :(得分:1)
你得到的是因为+
是空间" "
的网址编码表示。如果你想在你的值中预先加上加号,你需要对其进行url编码:
在URL编码的格式中发送该查询字符串,然后您将获得预期的结果。
请参阅:why Request.QueryString replace + with empty char in some cases?
答案 4 :(得分:1)
如果真的这么重要,以避免在发送时更改字符串,那么您可以在从httprequest获取ir后进行更改。也许你可以使用:
MyUrl = (Request["mt"].Replace(" ","+"));
没有可能在url中传递空格,所以当你有空格时,你可以确定那里有一个'+'。
答案 5 :(得分:0)
您可以使用以下方法获取查询字符串
string strQuery = Request.Url.Query;