开发者

Issue regarding accessing URLs with escaped characters in C#

I have an issue with URLs being transformed automatically as they are being processed.

Uri myUri = new Uri(this.url);

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

Apologies for the long urls In this case: this.url is correct

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

Whereas the url inside the Uri object is not

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

Note the differences of "%2F" --> "/". The same happens if I feed this.url straight into WebRequest and I get a 403 error from the S3 server because the signatures no longer match.

Is there a way to prevent such transformations from occuring?

EDIT: As this is a desktop application (sorry for not mentioning earlier) HTTPUtilities is not available but the URI class has a similar function so I tried that

this.url = Uri.EscapeUriString(this.url); and this.url gets set to:

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

and then from within the HttpWebRequest Object:

https://zencoder-live.s3.amazonaws.com/e09517d7841a9047f9ff7a2f015d2596%252F1e8e7e8e1a85665bc7e9b146ce444a88.mp4?Signature=6bs5vfOBUDeHeX2HdmrvVGDnDjE%253D&Expires=1284627002&AWSAccessKeyId=A开发者_开发知识库KIAIIEXNN2J4YDTRUVQ

The HttpWebRequest object has not transformed it at all so the URI is still incorrect. %2F gets converted to %252F and does not get converted back to %2F on creation of the Uri Object.


You might want to have a look at the HttpUtility class, which offers UrlDecode / UrlEncode methods.


%2F in the first URL is being correctly transformed to /.
In order to stop this you must first HttpUtility.UrlEncode() to ensure the % is encoded.

Uri myUri = new Uri(HttpUtility.UrlEncode(this.url));
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜