2012-04-19 85 views
1

我正在使用web請求寫一些對LinkedIn API的休息調用,並且遇到了編碼問題。LinkedIn API需要編碼的URI作爲查找參數之一跑步。.Net WebRequest.Create解碼編碼的URI

我們通過.Net的WebRequest.Create調用api;而當我們傳入URI時,它會解碼它,因此我們無法從調用中獲取數據。我試圖打開這樣的URI

http://api.linkedin.com/v1/people/url=http%3A%2F%2Fwww.linkedin.com%2Fin%2FProfileName 

在webrequest類中是否存在一種機制來阻止它解碼傳入的URI;或爲此工作?

+0

當您將該URI傳遞給'WebRequest.Create'時,結果如何?也就是說,當你提出請求時,WebRequest發送給服務器的是什麼?另外,你是否調用'WebRequest.Create(string)'或'WebRequest.Create(uri)'? – 2012-04-19 18:07:45

+0

當webrequest.create被調用時,我的URL將從上面的編碼形式轉換爲非編碼形式;並在API中鏈接失敗,因爲它需要編碼的查詢字符串數據。似乎通過對URL進行3次編碼來解決問題,但其效果不佳。 – u07ch 2012-04-23 06:58:22

回答

1

我不確定這會起作用,但它顯示了一些承諾。

static readonly string UrlString = 
    "http://api.linkedin.com/v1/people/url=http%3A%2F%2Fwww.linkedin.com%2Fin%2FProfileName"; 


Uri myUri = new Uri(Uri.EscapeUriString(UrlString)); 
Console.WriteLine(myUri.ToString()); // this is only to show the string for debugging 

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(myUri); 

輸出從Console.WriteLine那裏有相同的格式,只要你想的字符串。如果你通過這個Uri到WebRequest.Create,它可能很好地做你想要的。

+0

我已經結束了三重編碼我的網址,以停止解碼它的內置函數;做兩次是不夠的(它已經編碼,因爲我通過URL中)... MS需要添加一個方法,不這樣做... – u07ch 2012-04-25 11:32:22