2016-10-12 3 views
0

xamarin 형식의 .NET HttpClient를 사용하여 측량 원숭이에 연결하려고합니다. 저는 HttpClient, Xamarin, REST 및 Survey Monkey에 익숙하지 않아 어디서나 또는 모든 곳에서 실수를 저지를 수 있습니다.Survey Monkey에서 요청 헤더 오류로 잘못된 권한을 부여하고 있습니다.

컬링과 함께 설문 조사 원숭이 예제를 사용하여 약간의 성공을 거두었고이를 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 년대를 대체했다.

하지만 내가 잘못 AuthenticationHeaderValue() 부분을 처리하고 만약 내가 궁금

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

같은 응답을 얻고있다. 또는 다른 것?

답변

1

헤더의 형식이 올바르지 않은 경우 "권한 보유자 XXXXX"가 값으로 사용됩니다. 그래서 다음과 같습니다 :

Authorization: Authorization bearer XXXXX 

코드를 기반으로하는 이유는 확실하지 않습니다. 디버깅하고 보내려는 값을 확인해야합니다. 그러나 그것은해야한다 : 내 가정은 AuthenticationHeaderValue 당신이 기대하지 않는 일을하고 있습니다

Authorization: bearer XXXXX 

. 문서를 검색하면 올바르게 처리되는 것처럼 보입니다. 따라서 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; 
관련 문제