У меня проблема с преобразованием 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.
Возможно, вы захотите взглянуть на класс HttpUtility , который предлагает методы UrlDecode / UrlEncode.
%2F в первом URL-адресе корректно преобразуется в /. Чтобы остановить это, необходимо сначала HttpUtility.UrlEncode(), чтобы обеспечить кодирование %.
%2F
/
HttpUtility.UrlEncode()
%
Uri myUri = new Uri(HttpUtility.UrlEncode(this.url));