请求对象不拾取所有字符

时间:2013-06-24 09:20:37

标签: c# asp.net request

我对这种情况感到难过。基本上我有一个传递给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=

正如您所看到的,这两个字符串是不同的。

我认为这是字符串转换的对象,但这似乎不是这种情况,因为对象的值在转换之前省略了'+'。

可以做些什么来避免这个字符替换(我想尝试避免字符串操作)

这也可能是什么原因?

6 个答案:

答案 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;