请求对象未拾取所有字符

本文关键字:字符 对象 请求 | 更新日期: 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;