2016-10-12 31 views
0

我在xamarin表單中使用.NET HttpClient嘗試連接到調查猴子。我是HttpClient,Xamarin,REST和調查猴的新手,所以我可能在任何地方或任何地方犯錯誤。Survey Monkey在請求標題錯誤中給我一個無效的授權

我已經使用curl調查猴子的例子取得了一些成功,我試圖用HttpClient將它轉換爲C#代碼。

我有一些「測試代碼」像

HttpClient httpClient = new HttpClient(); 
Uri  uri  = new Uri("https://api.surveymonkey.net/v2/surveys/get_survey_list?api_key=humkanu389g5dp9tvsdrh8fv"); 
HttpContent content = new StringContent(String.Empty,Encoding.UTF8,"application/json"); 

httpClient.DefaultRequestHeaders.Accept.Clear(); 
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Authorization","Bearer XXXXXXXXX"); 
httpClient.Timeout = TimeSpan.FromSeconds(10); 

HttpResponseMessage response = Task.Run(() => httpClient.PostAsync(uri,content)).Result; 

String responseContent = Task.Run(() => response.Content.ReadAsStringAsync()).Result; 

在我的代碼,我已經取代了XXXXXXX與我的授權令牌。

但我越來越喜歡

{"status":1,"errmsg":"Invalid \"Authorization\" data in request header"} 

響應我想知道如果我處理AuthenticationHeaderValue()部分是錯誤的。或者是其他東西?

回答

1

您的標題格式不正確,您有「Authorization bearer XXXXX」作爲值。所以它看起來像這樣:

Authorization: Authorization bearer XXXXX 

我不確定爲什麼根據您的代碼,您應該調試並查看您發送的值。但它應該是:

Authorization: bearer XXXXX 

我的假設是AuthenticationHeaderValue正在做你不期待的事情。搜索文檔看起來像是在做正確的事情 - 所以我不確定C#代碼到底出了什麼問題,只是發送的標題不正確。

+0

>>您應該調試並查看您發送的值。 – user2735420

+0

>>您應該調試並查看您發送的值。 – user2735420

+0

沒關係,顯然我不能在評論中輸入換行符。它在我嘗試時發佈評論。我想說的是「怎麼樣?」我不知道如何「看」我發送的內容。我之前沒有完成REST和/或http的內容。謝謝 – user2735420

0

Kandalaft將軍確實指出了這個問題 - 回想起來很明顯,但我想在這裏發佈最終代碼,以防其他人試圖這樣做。

我最終修正了上面指出的AuthenticationHeaderValue。然後我遇到了一個問題,因爲我的請求內容是一個空字符串。我從一個例子中加入了一些json文本,它起作用了。所以最終代碼

HttpClient httpClient = new HttpClient(); 
Uri  uri  = new Uri("https://api.surveymonkey.net/v2/surveys/get_survey_list?api_key=humkanu389g5dp9tvsdrh8fv"); 
HttpContent content = new StringContent ("{ \"fields\": [ \"title\", \"date_modified\" ] }",Encoding.UTF8,"application/json"); 
httpClient.DefaultRequestHeaders.Accept.Clear(); 
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer","XXXXXX"); 
httpClient.Timeout = TimeSpan.FromSeconds(10); 

HttpResponseMessage response = Task.Run(() => httpClient.PostAsync(uri,content)).Result; 

String responseContent = Task.Run(() => response.Content.ReadAsStringAsync()).Result; 
相關問題