12

我正在尝试从 LinkedIn 获取公开的个人资料信息。为此,我必须提供
http://api.linkedin.com/v1/people/url=public-profile-url,其中 public-profile-url 必须是 URL 编码的。

问题是 .NET 类(如 HttpClient、WebRequest 等)使用 Uri 类,该类似乎“规范化”了提供的 URL,因此我无法发送正确格式的请求。

URI 必须是:

http://api.linkedin.com/v1/people/url=http%3a%2f%2fwww.linkedin.com%2fin%2fiftachragoler

但是:

http://api.linkedin.com/v1/people/url=http://www.linkedin.com/in/iftachragoler

通过这种方式,我收到了来自 LinkedIn 的“错误请求”。

有什么办法可以让 Uri/UriBuilder 不解码那个 URL?

4

2 回答 2

8

Microsoft connect 上有关于此的报告。由于安全原因,默认情况下不允许转义斜杠。

http://connect.microsoft.com/VisualStudio/feedback/details/94109/

从那里引用:

我尝试使用 LinkedIn api,为此我需要以下链接: http ://api.linkedin.com/v1/people/url=http%3A%2F%2Fwww.linkedin.com%2Fin%2Fyourlinkedinname:public

如您所见,需要对 url 字段进行转义。如何解决这个问题?

回答:

我们目前不允许转义的斜杠和点出现在路径中,因为当 URI 方案支持路径压缩时,这是攻击服务器的常用方法。

但是有解决方法的选项卡。.NET 4 的其中之一是添加 app.config:

对于 .NET 4.0,您可以通过配置文件进行控制:

http://msdn.microsoft.com/en-us/library/bb882619.aspx

http://msdn.microsoft.com/en-us/library/ee656539.aspx

<configuration>
<uri>
    <schemeSettings>
     <clear/>
     <add name="http" genericUriParserOptions="DontUnescapePathDotsAndSlashes"/>
    </schemeSettings>
</uri>
</configuration>

对于 .NET 之前的 .NET 是带有参数“dontEscape”的 Uri 类的构造函数。对于 .NET 4,它已经过时了。

于 2012-06-14T15:24:19.790 回答
0

如果你双重逃避它会发生什么?

http://api.linkedin.com/v1/people/url=http%253a%252f%252fwww.linkedin.com%252fin%252fiftachragoler
于 2012-06-14T13:55:13.340 回答