在使用 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?
在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