【问题标题】:Keep url encoded while using URI class使用 URI 类时保持 url 编码
【发布时间】:2012-06-17 13:45:10
【问题描述】:

我正在尝试从 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?

【问题讨论】:

  • 你在做类似"http://api.linkedin.com/v1/people/url=" + uri.ToString()的事情吗?然后 URI 类正在做它应该做的事情,而你做错了。
  • 实际上,我正在执行“api.linkedin.com/v1/people/url=”+ Url.Encode(profileUrl),然后将其传递给 DotNetOpenAuth,DotNetOpenAuth 本身将其传递给 UriBuilder。
  • .NET 中没有 Url 类。请显示您正在使用的实际代码。
  • 对不起,我的错:var linkedInRequestUrls = string.Format(LinkedInRestApi.PeoplePersonByPublicUrl, HttpUtility.UrlEncode(url))

标签: c# .net web linkedin


【解决方案1】:

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

【讨论】:

  • 谢谢,伙计!这成功了。将该部分添加到 Web.config 后,我解决了这个问题。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2013-01-13
    • 2011-06-27
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    相关资源
    最近更新 更多