С# декодирует URL-адрес, содержащий %2F в пути, есть ли способ указать API отправлять URL-адрес как есть?

У меня есть URL-адрес в формате ниже abcd.com/xyz/pqr%2Fss/abc

Я хочу, чтобы это было отправлено на сервер как есть. Когда я создаю Uri с помощью System.Uri, он преобразует его в abcd.com/xyz/pqr/ss/abc, и это не удается, поскольку у меня нет URL-адреса с указанным путем.

Когда я попытался использовать двойное кодирование (abcd.com/xyz/pqr%252Fss/abc), он отправил Uri как есть, но не удалось преобразовать его на стороне сервера (abcd.com/xyz/pqr%2Fss/abc)


person avaya    schedule 17.11.2010    source источник
comment
Если он отправляет URL-адрес как есть в вашем втором примере, он не работает на сервере. Так что да, есть способ сделать это — метод двойного кодирования.   -  person cdhowie    schedule 17.11.2010
comment
Тогда у вас проблемы с сервером. Что на стороне сервера?   -  person SLaks    schedule 17.11.2010
comment
И вы пытались использовать этот HTMLEncode в строке перед ее отправкой? msdn.microsoft.com/en-us/library/w3te6wfz.aspx   -  person Mike Cheel    schedule 17.11.2010
comment
Вот ответ: stackoverflow.com/questions/781205/   -  person Maer007    schedule 13.08.2011
comment
Вот ответ stackoverflow.com/questions/781205/   -  person Maer007    schedule 13.08.2011


Ответы (2)


Если вы создадите свой uri как таковой:

Uri u = new Uri("http://abcd.com/xyz/pqr%2Fss/abc")

Получите доступ к закодированной строке следующим образом:

u.OriginalString
person WiseGuyEh    schedule 17.11.2010

У меня тоже была эта проблема, но я нашел решение: когда вы используете HttpUtility.UrlEncode, чтобы быть уверенным, что приложение правильно прочитает URL-адрес, вы должны построить ссылку следующим образом:

http://www.abcd.com/xyz?val=pqr%2Fss

а не так

http://www.abcd.com/xyz/pqr%2Fss

где pqr%2Fss является результатом HttpUtility.UrlEncode("SOME STRING")

person Marco Delgado    schedule 02.07.2011