Форматирование строки запроса asp.net

Как я могу отправить специальные символы в строке запроса?

Подобно:

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 / FUvq9sQbWwrYh5xX7G 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% 2fFUvq9sQbWwrYh5xX7G% 2bVktXU5o17hycAfNSND8gt8YbbUaJbwRw

Но он декодирует его так: GQH / FUvq9sQbWwrYh5xX7G [2 пробела здесь]VktXU5o17hycAfNSND8gt8YbbUaJbwRw

2 ответа

Решение

Взгляните на использование Server.UrlEncode() для кодирования параметра перед включением его в строку запроса и использование Server.UrlDecode() для преобразования его обратно, когда вам это нужно.

MSDN статья

вызов Server.UrlEncode() для "GQH/FUvq9sQbWwrYh5xX7G++VktXU5o17hycAfNSND8gt8YbbUaJbwRw" приводит к:

GQH%2fFUvq9sQbWwrYh5xX7G%2b%2bVktXU5o17hycAfNSND8gt8YbbUaJbwRw

и вызов Server.UrlDecode для этого результата дает:

GQH/FUvq9sQbWwrYh5xX7G++VktXU5o17hycAfNSND8gt8YbbUaJbwRw

Вы должны убедиться, что URL-адрес кодирует данные строки запроса, прежде чем добавить его в URL-адрес.

Вы можете:

  1. Как сказал Майк, вы можете HttpServerUtility.UrlEncode выше Base64 строки (и наоборот, декодировать)
  2. Если вы придерживаетесь MS на обоих концах, вы также можете заглянуть в HttpServerUtility.UrlTokenEncode - смотрите эту заметку, если вы выберете эту опцию

Обновить

Тьфу. Это возвращается ко мне - base64 получил: "Конструктор для HttpRequest будет анализировать фактическую строку QueryString и UrlDecode для вас значения. Будьте осторожны, чтобы НЕ ДВОЙНОЙ DECODE". - Скотт Хансельман

Мое личное предложение было бы пойти по маршруту UrlToken, если вы собираетесь делать base64...

Другие вопросы по тегам