Потеря символов при разборе строк в сети с использованием строк запроса - PullRequest
0 голосов
/ 30 января 2010

Я пытаюсь запросить веб-страницу с веб-сервера iis, которым я управляю, используя строки запроса.

Например, у меня есть веб-браузер в моем приложении winforms, и я запрашиваю страницу, похожую на "www.site.com/getpage.ashx?field=afsfgwesar+sere"

Когда я пытаюсь запустить это, происходит сбой, потому что на стороне сервера getpage.ashx не может найти правильное поле.

После долгих потянув за волосы, я понял, что строка фактически изменилась по сравнению с тем, что было отправлено в браузер, и тем, что было получено, т.е. символ плюс отсутствует, когда сервер начинает работать с ним.

Он начинается как "afsfgwesar + sere" и заканчивается как "afsfgwesarsere". Так где-нибудь вдоль строки переформатируется строка?

Вот так я получаю строку на стороне сервера -

string field = (string)context.Request.QueryString["field"];

Именно в этот момент я вошел и увидел недостающий символ плюса.

Кто-нибудь знает, почему я теряю символ плюса и как мне его вернуть?

Ответы [ 2 ]

2 голосов
/ 30 января 2010

Символ + заменяется пробелом, поскольку пробелы не допускаются.

Вы можете вставить %2B, чтобы «получить» символ плюса после декодирования URL.

www.site.com/getpage.ashx?field=afsfgwesar%2Bsere

Класс HttpUtility имеет методы для URL-кодирования и декодирования строк. Чтобы увидеть, что он в основном делает, есть также онлайн-кодер / декодер , который вы можете использовать.

0 голосов
/ 30 января 2010

Знак плюс является зарезервированным символом в строках запроса. Это часто интерпретируется как космический символ. Просто взгляните на поисковую систему, и вы заметите это.

Вы можете предотвратить это, кодируя текст afsfgwesar + sere перед добавлением его в строку запроса. Используйте HttpUtility.UrlEncode для этого. Используйте HttpUtility.UrlDecode, чтобы прочитать его обратно.

Для получения дополнительной информации читайте: http://msdn.microsoft.com/en-us/library/4fkewx0t.aspx

...