asp.net查询字符串格式

时间:2012-10-16 13:43:03

标签: asp.net vb.net query-string request-queueing

如何在查询字符串中发送特殊字符?

像:

thankyou.aspx?data=GQH/FUvq9sQbWwrYh5xX7G++VktXU5o17hycAfNSND8gt8YbbUaJbwRw

当我这样做时, ++ 会被删除:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  Dim theData As String = Request.QueryString("data")
  ....

它将它存储在数据中,如下所示:

GQH / FUvq9sQbWwrYhxx7G VktXU5o17hycAfNSND8gt8YbbUaJbwRw

因此无效。我怎样才能正确发送该字符串而不改变它一旦收到它?

更新

这样做:

Dim en As String = endecryption.EncryptData("=" & "aclub" & "=" & strName & "=" & strEmail)
Response.Redirect("/thankyou.aspx?data=" & HttpUtility.UrlEncode(en), False)

在另一端:

Dim theData As String = HttpUtility.UrlDecode(Request.QueryString("data"))

它发送如下: GQH%2fFUvq9sQbWwrY5xX7G%2bVktXU5o17hycAfNSND8gt8YbbUaJbwRw

但它解码它像: GQH / FUvq9sQbWwrYh5xX7G [此处2个空格] VktXU5o17hycAfNSND8gt8YbbUaJbwRw

2 个答案:

答案 0 :(得分:3)

看一下使用Server.UrlEncode()对参数进行编码,然后将其包含在查询字符串中,并在需要时使用Server.UrlDecode()将其转换回来。

msdn article

在“GQH / FUvq9sQbWwrYh5xX7G ++ VktXU5o17hycAfNSND8gt8YbbUaJbwRw”上调用Server.UrlEncode()产生:

GQH%2fFUvq9sQbWwrYh5xX7G%2b%2bVktXU5o17hycAfNSND8gt8YbbUaJbwRw

并在该结果上调用Server.UrlDecode会产生:

GQH/FUvq9sQbWwrYh5xX7G++VktXU5o17hycAfNSND8gt8YbbUaJbwRw

您需要确保在将查询字符串数据附加到网址之前对其进行网址编码。

答案 1 :(得分:1)

你可以:

  1. 正如迈克所说,你可以HttpServerUtility.UrlEncode上面的base64字符串(反过来解码)
  2. 如果您在两端都坚持使用MS,您还可以查看HttpServerUtility.UrlTokenEncode - 如果您选择此选项,请参阅this note
  3. 更新

    唉。它回到我身边 - base64陷阱:“HttpRequest的构造函数将解析实际的字符串QueryString和UrlDecode为你的值。注意不要双重解码。” - Scott Hanselman

    我个人的建议是,如果你打算做base64,那就去UrlToken路线...