请求对象未拾取所有字符
本文关键字:字符 对象 请求 | 更新日期: 2023-09-27 18:19:35
我对这个场景感到困惑。基本上,我有一个传递到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=
正如你所看到的,这两个字符串是不同的。
我以为这是对象到字符串的转换,但事实似乎并非如此,因为转换前对象的值省略了"+"。
可以做些什么来避免这种字符替换(我想尽量避免字符串操作)
还有,这可能是什么原因?
因为+
是空间" "
的url编码表示。如果你想在你的值中预先设置加号,你需要对其进行url编码:
以URL编码的格式发送查询字符串,然后您将得到预期的结果。
请参阅:为什么Request.QueryString在某些情况下用空字符替换+?
您可以使用
MyUrl = MyUrl.Replace("+",@"%2B");
问题是,如果使用httprequest,"+"字符将被转换为空白。如果将其转换为十六进制值,则可以毫无问题地传递它。
您应该使用HttpUtility.UrlEncode来生成参数值。目前,您似乎正在使用base64编码,这对于查询参数来说不是最佳的。
使用此:
mt=encodeURIComponent(mt);//if mt be --> jan1TNIixxA1+8tl/0vLLg2PPGq0vMOLEhFQNuG4AJU12VMZpnWTrgar82K5UlXatQT9E9EAUet+q7rq7FoTJf+S2JnSbIptgJDY1EZwRPJDTROktfu5zy25oydmSHB6a4oZetV5mI3s+0R7vW8I0S9d765RHdYU2xkRuojHYZU=
Response.Redirect("Test.aspx?"+mt);
这将对你的URL进行编码,之后"+"将转换为"%2B",如果你想读取编码的URL,它将不会转换为空格。
从这里
如果在发送字符串时避免更改字符串非常重要,那么您可以在从httprequest获得ir后进行更改。也许你可以使用:
MyUrl = (Request["mt"].Replace(" ","+"));
url中不可能传递空格,所以当你有空格时,你可以确定里面有一个"+"。
您可以使用以下方法获取查询字符串
string strQuery = Request.Url.Query;