2

我被这个场景难住了。基本上我有一个传递给 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=

如您所见,这两个字符串是不同的。

我认为这是对象到字符串的转换,但这似乎并非如此,因为对象的值在转换之前省略了“+”。

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

还有可能是什么原因造成的?

4

6 回答 6

1

您可以使用

MyUrl = MyUrl.Replace("+",@"%2B");

问题是如果您使用 httprequest,'+' 字符将被转换为空格。如果将其转换为十六进制值,则可以毫无问题地传递它。

于 2013-06-24T09:25:16.223 回答
1

您应该使用HttpUtility.UrlEncode来生成参数值。目前,您似乎正在使用 base64 编码,这对于查询参数不是最佳的。

于 2013-06-24T09:27:51.853 回答
1

用这个:

mt=encodeURIComponent(mt);//if mt be --> jan1TNIixxA1+8tl/0vLLg2PPGq0vMOLEhFQNuG4AJU12VMZpnWTrgar82K5UlXatQT9E9EAUet+q7rq7FoTJf+S2JnSbIptgJDY1EZwRPJDTROktfu5zy25oydmSHB6a4oZetV5mI3s+0R7vW8I0S9d765RHdYU2xkRuojHYZU=
Response.Redirect("Test.aspx?"+mt);

这将对您的 URL 进行编码,并且在此之后“+”将转换为“%2B”,如果您想读取编码的 URL,它将不会转换为空格。

这里

于 2013-06-24T09:27:58.700 回答
1

你得到那个是因为+是空间的 url 编码表示" "。如果您想在您的值中保留加号,则需要对其进行 url 编码:

以 URL 编码格式发送该查询字符串,然后您将获得预期的结果。

请参阅:为什么 Request.QueryString 在某些情况下将 + 替换为空字符?

于 2013-06-24T09:33:04.847 回答
1

如果在发送时避免更改字符串真的很重要,那么您可以在从 httprequest 获取 ir 之后更改它。也许你可以使用:

MyUrl = (Request["mt"].Replace(" ","+"));

在 url 中不可能传递空格,所以当你有空格时,你可以确定那里有一个“+”。

于 2013-06-24T09:42:04.867 回答
0

您可以使用以下方法获取查询字符串

string strQuery =  Request.Url.Query;
于 2013-06-24T09:23:20.580 回答