使用URI类时保持url编码

时间:2012-06-14 13:50:02

标签: c# .net web linkedin

我正在尝试从LinkedIn获取公开个人资料信息。要实现这一点,我必须提供 http://api.linkedin.com/v1/people/url=public-profile-url,其中public-profile-url必须进行URL编码。

问题是,像HttpClient,WebRequest等.NET类使用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获得了“Bad Request”。

有什么方法可以让Uri / UriBuilder不解码该网址?

2 个答案:

答案 0 :(得分: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

     

正如您所见,需要转义网址字段。怎么解决这个问题?

答案:

  

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

但是有一些工作区的标签。其中一个用于.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是Uri类的构造函数,参数为“dontEscape”。对于.NET 4,它已经过时了。

答案 1 :(得分:0)

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

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