sopi9 Ответов: 2

знак " + " заменяется пробелом в строке запроса


Я получаю хит от URL-адреса, который содержит закодированные данные. Я столкнулся с ситуацией, когда эти данные имели знак+, который заменяется пробелом, и я не хочу, чтобы это произошло.

Пример URL-адреса: http://xyz.test.com//samplepage.aspx?msg=AUdAR0JGRERBWCMZIxYmJR8fTRY+JR5DRRkxQiA4RUQ=

Указанный выше URL-адрес отправляется пользователям через стороннее приложение.

Что я уже пробовал:

Я использовал сервер.UrlEncode (Запрос.QueryString ["REF"]);
Это не замена знака + пробелом, а замена знака "=" на %3d.

Я думал использовать функцию "заменить", чтобы заменить " пробел "на"+". Но зашифрованные данные могут быть любыми. Есть ли другой способ избежать такого поведения?

Bernhard Hiller

Насчет поста, а не вам?

2 Ответов

Рейтинг:
2

F-ES Sitecore

Вам нужно закодировать значение msg при создании\redirect на url-адрес.

string url = string.Format("samplepage.aspx?msg={0}",
    System.Web.HttpUtility.UrlEncode("AUdAR0JGRERBWCMZIxYmJR8fTRY+JR5DRRkxQiA4RUQ="));


sopi9

Я не генерирую URL-адрес, я получаю хит из другого источника. Таким образом, у меня нет контроля над тем, что я получаю в URL querystring

F-ES Sitecore

Приложение, которое инициирует запрос, тогда плохо написано. Ваш единственный реальный вариант-заменить ""на"+", когда вы читаете параметр.

sopi9

URL-адрес отправляется через приложение SAP

F-ES Sitecore

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

sopi9

Спасибо за ответ, это то, что я делаю, но я думал, что будет более элегантный и аутентичный способ сделать это.

Рейтинг:
0

Kornfeld Eliyahu Peter

По замыслу (и изначально) в url-пространстве должно быть закодировано + , а не %20...
Таким образом, решение заключается в том, чтобы закодировать url самостоятельно, как вы это сделали...
Это будет понятно браузеру и не изменит данные...
Другой - вероятно, менее предпочтительный-вариант заключается в том, чтобы base64 кодировал только ваши данные (часть после msg=). В этом случае вам придется декодировать вручную...