Запитувати об'єкт, який не піднімає всі символи

Я стих на цьому сценарії. У принципі, у мене є URL, який передається на сторінку ASP, а потім я намагаюся отримати рядок запиту з URL-адреси, але що трапляється, коли я намагаюся отримати рядок запиту з URL-адреси, в якій він не містить "+" і замінює його на пробіл.

My URL =  http://localhost:3872/Test.aspx?mt=jan1TNIixxA1+8tl/0vLLg2PPGq0vMOLEhFQNuG4AJU12VMZpnWTrgar82K5UlXatQT9E9EAUet+q7rq7FoTJf+S2JnSbIptgJDY1EZwRPJDTROktfu5zy25oydmSHB6a4oZetV5mI3s+0R7vW8I0S9d765RHdYU2xkRuojHYZU=

Request["mt"] =jan1TNIixxA1 8tl/0vLLg2PPGq0vMOLEhFQNuG4AJU12VMZpnWTrgar82K5UlXatQT9E9EAUet q7rq7FoTJf S2JnSbIptgJDY1EZwRPJDTROktfu5zy25oydmSHB6a4oZetV5mI3s 0R7vW8I0S9d765RHdYU2xkRuojHYZU=

Як видно, ці два рядки різні.

Я думав, що це є об'єктом перетворення рядка, але це, здається, не є причиною того, що значення об'єкта має опущений "+" перед перетворенням.

Що можна зробити, щоб уникнути заміни цього персонажа (я хочу спробувати уникати обробки рядків)

Крім того, що може бути причиною цього?

2

6 Відповіді

Ви можете використовувати

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

Проблема полягає в тому, що символ "+" перетворюється на пробіл, якщо ви використовуєте httprequest. Якщо ви перетворите його в його шістнадцяткове значення, ви можете передати його без проблем.

1
додано

Якщо це дійсно настільки важливо, щоб не змінювати рядок, коли ви його відправляєте, ви можете змінити його після того, як отримаєте від httprequest. Можливо, ви могли б використовувати:

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

Немає можливості пропускати пробіл у url, тому, коли у вас є простір, ви можете бути впевнені, що там є '+'.

1
додано

Використовуй це:

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

це буде кодувати вашу URL-адресу, після чого "+" перетвориться на "% 2B", і якщо ви хочете переглянути закодовану URL-адресу, вона не буде перетворена в пробіл.

from here

1
додано

Ви повинні використовувати HttpUtility.UrlEncode , щоб генерувати вас значення параметра На даний момент, здається, ви використовуєте кодування base64, яке не є оптимальним для параметрів запиту.

1
додано

ви отримуєте це, тому що + - це кодування URL-адреси пробілу . Якщо ви хочете попередньо ввести знак "плюс" у своєму значенні, вам потрібно буде кодування URL-адреси:

Відправте цю строку запиту у формати, закодовану URL-адресою, і тоді ви отримаєте очікуваний результат.

see: why Request.QueryString replace + with empty char in some cases?

1
додано

Ви можете отримати рядок запиту за допомогою такого методу

string strQuery =  Request.Url.Query;
0
додано
Що ви хочете сказати "кілька рядків запиту"?
додано Автор Rajeev Kumar, джерело
Як це буде працювати з декількома рядками запиту. Знову хочу спробувати уникнути маніпуляцій струн.
додано Автор SpaceApple, джерело
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug