【发布时间】:2012-01-13 19:09:27
【问题描述】:
我看到很多帖子询问使用不符合标准的 Uris,但没有一个给出好的答案。我正在编写一个 Windows Phone 控件,它需要使用 HTTP GET 请求 ATOM 数据。 URL 需要在其中包含字符 %3d(等号)。这是不可协商的,因为它是我无法控制的第三方服务。想象一个如下所示的 URL:
http://host.com?arg1=val1&arg=val2%3d
我将 WebClient 与 DownloadStringAsync 一起使用,但它只接受 Uri 对象,而不接受字符串中的 URL。 Uri 对象自动取消转义这些字符并发送:
http://host.com?arg1=val1&arg=val2=
这失败了。有一个已弃用的构造函数参数“UserExcaped”正是我需要的,但它不可用。我担心我唯一的选择是使用原始套接字和最少的 HTTP 支持来实现我自己的字符串下载方法。
还有其他想法吗?非常感谢您的帮助!
更新
string apps = "http://blah.com/api?prev=AAAAAAA%3d&next=BBBBBBB";
var u = new Uri(apps);
string apps2 = u.ToString();
Debug.Assert(apps == apps2); // That %3d will always be converted to an equals sign
我还应该指出,如果我尝试通过将百分比编码为 %25 来变得聪明(所以它是“prev=AAAAAA%253d&next=BBBBB”),那么我得到的确切文字字符串 %25 仍然完好无损!只是 %3d 积极地转换为等号。
【问题讨论】:
-
有没有办法可以设置页面 Page ResponseEncoding="iso-8859-1" 听起来像是编码问题
-
您是否尝试过使用HttpUtility.UrlEncode或HttpUtility.UrlDecode等。我肯定会使用编码参数访问服务器,但我使用的是 HttpWebRequest。
-
嗯...我在我的问题中添加了一个示例。一旦你尝试构造一个 URI,它就会把它搞砸。
-
不是答案,但如果您找不到解决方案,它可能会有所帮助。我的建议是定义和托管自己的网络服务,间接调用第三方的网络服务。这样,您的应用程序就不会受到 Web 服务定义更改的影响,您还可以跟踪您的应用程序使用情况。
标签: c# windows-phone-7 uri