在使用 URI 类时保持 url 编码

本文关键字:url 编码 URI | 更新日期: 2023-09-27 18:37:05

我正在尝试从LinkedIn获取公开个人资料信息。为了实现这一目标,我必须提供
http://api.linkedin.com/v1/people/url=public-profile-url,其中公共配置文件 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?

在使用 URI 类时保持 url 编码

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

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,它已经过时了。

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

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