【发布时间】:2010-09-15 08:26:48
【问题描述】:
我在处理 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();
为长网址道歉 在这种情况下:this.url 是正确的
(https://zencoder-live.s3.amazonaws.com:443/ec03a97b1f726d8ee65774313a100db5%2Fa54779efdf5d1f64ac82954c870beb12.mp4?Signature=nrc0U65Pe3PiORokhAscndLdP68%3D&Expires=1284625412&AWSAccessKeyId=AKIAIIEXNN2J4YDTRUVQ)
而 Uri 对象内的 url 不是
({https://zencoder-live.s3.amazonaws.com/ec03a97b1f726d8ee65774313a100db5/a54779efdf5d1f64ac82954c870beb12.mp4?Signature=nrc0U65Pe3PiORokhAscndLdP68=&Expires=1284625412&AWSAccessKeyId=AKIAIIEXNN2J4YDTRUVQ}
注意 "%2F" --> "/" 的区别。 如果我将 this.url 直接输入到 WebRequest 中,也会发生同样的情况,因为签名不再匹配,所以我从 S3 服务器收到 403 错误。
有没有办法防止这种转变发生?
编辑: 由于这是一个桌面应用程序(抱歉之前没有提及)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,并且在创建 Uri 对象时不会转换回 %2F。
【问题讨论】:
标签: c# webrequest