Проблема с доступом к URL с экранированными символами в C # - PullRequest
2 голосов
/ 15 сентября 2010

У меня проблема с преобразованием URL-адресов автоматически по мере их обработки.

Uri myUri = new Uri(this.url);

     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(myUri);
     request.ProtocolVersion = HttpVersion.Version10;
     request.Method = "GET";
     HttpWebResponse response = (HttpWebResponse)request.GetResponse();

Извинения за длинные URL В этом случае: this.url правильный

(https://zencoder-live.s3.amazonaws.com:443/ec03a97b1f726d8ee65774313a100db5%2Fa54779efdf5d1f64ac82954c870beb12.mp4?Signature=nrc0U65Pe3PiORokhAscndLdP68%3D&Expires=1284625412&AWSAccessKeyId=AKIAIIEXNN2J4YDTRUVQ)

В то время как url ​​внутри объекта Uri не

({https://zencoder-live.s3.amazonaws.com/ec03a97b1f726d8ee65774313a100db5/a54779efdf5d1f64ac82954c870beb12.mp4?Signature=nrc0U65Pe3PiORokhAscndLdP68=&Expires=1284625412&AWSAccessKeyId=AKIAIIEXNN2J4YDTRUVQ}

Обратите внимание на различия "% 2F" -> "/". То же самое случается, если я напрямую подаю this.url в WebRequest и получаю ошибку 403 с сервера S3, потому что подписи больше не совпадают.

Есть ли способ предотвратить такие превращения?

EDIT: Поскольку это настольное приложение (извините, что не упомянул ранее), HTTPUtilities недоступен, но класс URI имеет аналогичную функцию, поэтому я попробовал, чтобы

this.url = Uri.EscapeUriString (this.url); и this.url получает значение:

https://zencoder-live.s3.amazonaws.com:443/e09517d7841a9047f9ff7a2f015d2596%252F1e8e7e8e1a85665bc7e9b146ce444a88.mp4?Signature=6bs5vfOBUDeHeX2HdmrvVGDnDjE%253D&Expires=1284627002&AWSAccessKeyId=AKIAIIEXNN2J4YDTRUVQ

, а затем изнутри объекта HttpWebRequest:

https://zencoder-live.s3.amazonaws.com/e09517d7841a9047f9ff7a2f015d2596%252F1e8e7e8e1a85665bc7e9b146ce444a88.mp4?Signature=6bs5vfOBUDeHeX2HdmrvVGDnDjE%253D&Expires=1284627002&AWSAccessKeyId=AKIAIIEXNN2J4YDTRUVQ

Объект HttpWebRequest вообще не преобразовал его, поэтому URI по-прежнему неверен. % 2F преобразуется в% 252F и не преобразуется обратно в% 2F при создании объекта Uri.

Ответы [ 2 ]

2 голосов
/ 15 сентября 2010

Возможно, вы захотите взглянуть на класс HttpUtility , который предлагает методы UrlDecode / UrlEncode.

1 голос
/ 15 сентября 2010

%2F в первом URL-адресе корректно преобразуется в /.
Чтобы остановить это, необходимо сначала HttpUtility.UrlEncode(), чтобы обеспечить кодирование %.

Uri myUri = new Uri(HttpUtility.UrlEncode(this.url));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...