URL для HttpWebRequest, усеченный специальными символами - PullRequest
2 голосов
/ 13 мая 2011

URL-адрес веб-службы, которую мне нужно вызвать, включает параметр, содержащий текст в произвольной форме.Я не уверен, почему он был разработан таким образом, поскольку он отправляется с использованием POST и включает в себя множество полей как часть POST.Но это вызывает у меня проблему.

Для некоторых символов, таких как знак фунта и <>, URL-адрес усекается при попадании в символ проблемы.Я HTML кодирую текст для параметра, но проблема остается.Я вижу, что специальные символы, такие как>, кодируются в нечто вроде gt ;.Я думаю, что точка с запятой в закодированной строке как-то проблема.

Я помещаю сниффер, получающий входящий запрос на сервер, и вижу там, что URL был усечен.

На сервере я вижу что-то вроде:

    ...?extraData=kjfkfjslkj

вместо:

    ...?extraData=kjfkfjslkj#kfjkdlsfj

Код выглядит примерно так:

    using System.Web;
    ....
    String strExtra="kjfkfjslkj#kfjkdlsfj";
    strURL = strStuff + "?extraData=" + System.Web.HttpUtility.HtmlEncode(strExtra);
    HttpWebRequest oRequest = (HttpWebRequest)WebRequest.Create(new Uri(strURL));
    oRequest.Method = httpMethod;
    oRequest.ContentType = "application/atom+xml";
    ...
    using (WebResponse oResponse = oRequest.GetResponse())
    {
    ...
    }

1 Ответ

7 голосов
/ 13 мая 2011

Все после знака хеша (#) не отправляется на сервер. Он используется браузером и скриптами на странице для обозначения местоположения на странице или какого-либо другого значения. Удалите знак хеша или URL-кодировку (%23), чтобы отправить его на сервер.

Эта строка:

strURL = strStuff + "?extraData=" + System.Web.HttpUtility.HtmlEncode(strExtra);

должно быть

strURL = strStuff + "?extraData=" + Server.UrlEncode(strExtra);

Кодировка для html бесполезна при использовании данных в URL.

...