2012-06-14 76 views
10

我試圖從LinkedIn獲取公開的個人資料信息。爲了達到這個目的,我必須提供
http://api.linkedin.com/v1/people/url=public-profile-url,其中public-profile-url必須是URL編碼的。使用URI類保留網址編碼

問題是.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?

+0

你在做''http://api.linkedin.com/v1/people/url=「+ uri.ToString()'嗎?然後,URI類正在做它應該做的事情,你做錯了。 – dtb

+0

其實,我正在做「http://api.linkedin.com/v1/people/url=」+ Url.Encode(profileUrl),然後將它傳遞給DotNetOpenAuth,它本身將它傳遞給UriBuilder。 –

+2

.NET中沒有Url類。請顯示您正在使用的實際代碼。 – dtb

回答

8

有關於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:

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 4.0中,你可以通過配置文件控制此.NET之前的.NET是Uri類的參數「dontEscape」的構造函數。對於.NET 4,它已經過時了。

+0

謝謝,男人!這做了伎倆。已經添加到Web.config部分,我解決了這個問題。 –

0

如果你雙重逃脫它會發生什麼?

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

我試過了。可悲的是不工作:( –