2013-01-10 47 views
1

我試圖連接到一個API(在這種情況下freeagent)來獲取一些數據。我使用Google的OAuth Playground爲我生成了一個令牌。FreeAgent API(OAuth)來自c#

var req = (HttpWebRequest)WebRequest.Create("https://api.freeagent.com/v2/recurring_invoices"); 

req.Headers["Authorization"] = "Bearer " + Convert.ToBase64String(Encoding.ASCII.GetBytes(_accessToken)); 

req.ContentType = "application/xml"; 
req.Accept = "application/xml"; 
req.Method = "GET"; 

// and get the response 
var resp = req.GetResponse(); 
var streamIn = new StreamReader(resp.GetResponseStream()); 
returnData = streamIn.ReadToEnd(); 
streamIn.Close(); 

return resp; 

現在我鬆耦合想CONVER如下:https://dev.freeagent.com/docs/using_curl

我不斷地得到一個錯誤的請求HTTP 400 - 任何人有什麼可能會造成這個問題有什麼建議?

+0

它是最有可能您的令牌不被接受。你是否需要轉換爲Base-64字符串?如果你在沒有轉換的情況下放入訪問令牌會怎樣? – Jacco

+0

即使沒有編碼,結果也是一樣的。 – LiamB

回答

2

解決方案是,也要傳遞UserAgent。

例...

req.UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17"; 
0

您不應該需要base64編碼令牌,只需將授權標頭設置爲「承載」+ _accessToken。如果這仍然不起作用,請嘗試使用http://httpbin.org/get作爲URL來查看您的請求,以查看是否有任何其他可能的問題。

2

我有大部分的API使用RestSharp工作:

https://github.com/nicwise/FreeAgent

我寫了我的iPhone應用程序,mobileAgent,但它是相當基礎 .NET,所以它應該對任何工作。

我的驗證碼注射看起來非常像你:

protected void SetAuthentication(RestRequest request) 
{ 
    request.AddHeader("Authorization", "Bearer " + 
Client.CurrentAccessToken.access_token); 
} 

你有沒有運行小提琴手或類似的,看看到底是怎麼回事 在電線的東西嗎?這通常有幫助。

+0

Cheers Nic,會檢查你的項目。我有更多的時間來看它,提琴手是我的下一個選擇。將看到它是如何去。 – LiamB