【问题标题】:.Net WebRequest.Create Decoding encoded URI.Net WebRequest.Create 解码编码的 URI
【发布时间】:2012-05-01 03:53:05
【问题描述】:

我正在使用 Web 请求编写对 LinkedIn API 的一些休息调用,但遇到了编码问题。LinkedIn API 需要一个编码的 URI 作为我尝试运行的查找的参数之一。

我们通过.Net的WebRequest.Create调用api;当我们传入 URI 时,它会对其进行解码,因此我们无法从调用中获取数据。我试图打开这样的 URI

http://api.linkedin.com/v1/people/url=http%3A%2F%2Fwww.linkedin.com%2Fin%2FProfileName

webrequest 类中是否有机制阻止它对传入的 URI 进行解码;或解决这个问题?

【问题讨论】:

  • 当您将该 URI 传递给 WebRequest.Create 时,结果是什么?也就是说,当你发出请求时,WebRequest 向服务器发送了什么?另外,你是打电话给WebRequest.Create(string),还是WebRequest.Create(uri)
  • 当 webrequest.create 被调用时,我的 URL 从上面的编码形式转换为非编码形式;并且 API 中的链接失败,因为它需要编码的查询字符串数据。似乎可以通过将 URL 编码 3 次来解决问题,但它并不优雅。

标签: .net vb.net .net-3.5


【解决方案1】:

我不确定这是否会奏效,但它显示了一些希望。

static readonly string UrlString =
  "http://api.linkedin.com/v1/people/url=http%3A%2F%2Fwww.linkedin.com%2Fin%2FProfileName";


Uri myUri = new Uri(Uri.EscapeUriString(UrlString));
Console.WriteLine(myUri.ToString());  // this is only to show the string for debugging

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(myUri);

Console.WriteLine 的输出与您想要的字符串格式相同。如果您将该 Uri 传递给 WebRequest.Create,它可能会满足您的要求。

【讨论】:

  • 我最终对我的网址进行了三重编码,以阻止内置函数对其进行解码;这样做两次还不够(它在我传递 URL 时已经被编码)...... MS 需要添加一个不这样做的方法......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
  • 2011-10-25
  • 1970-01-01
  • 2020-03-20
  • 2011-02-05
相关资源
最近更新 更多