Форматирование строки запроса 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() для преобразования его обратно, когда вам это нужно.
вызов Server.UrlEncode() для "GQH/FUvq9sQbWwrYh5xX7G++VktXU5o17hycAfNSND8gt8YbbUaJbwRw" приводит к:
GQH%2fFUvq9sQbWwrYh5xX7G%2b%2bVktXU5o17hycAfNSND8gt8YbbUaJbwRw
и вызов Server.UrlDecode для этого результата дает:
GQH/FUvq9sQbWwrYh5xX7G++VktXU5o17hycAfNSND8gt8YbbUaJbwRw
Вы должны убедиться, что URL-адрес кодирует данные строки запроса, прежде чем добавить его в URL-адрес.
Вы можете:
Как сказал Майк, вы можете HttpServerUtility.UrlEncode выше Base64 строки (и наоборот, декодировать)- Если вы придерживаетесь MS на обоих концах, вы также можете заглянуть в HttpServerUtility.UrlTokenEncode - смотрите эту заметку, если вы выберете эту опцию
Обновить
Тьфу. Это возвращается ко мне - base64 получил: "Конструктор для HttpRequest будет анализировать фактическую строку QueryString и UrlDecode для вас значения. Будьте осторожны, чтобы НЕ ДВОЙНОЙ DECODE". - Скотт Хансельман
Мое личное предложение было бы пойти по маршруту UrlToken, если вы собираетесь делать base64...