我正在使用xamarin表单中的.NET HttpClient尝试连接调查猴子。我是HttpClient,Xamarin,REST和调查猴子的新手,所以我可能在任何地方或任何地方犯错误。
我使用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()部分错误。或其他什么?
答案 0 :(得分:1)
您的标题格式不正确,您有"授权承载XXXXX"作为价值。所以它看起来像这样:
Authorization: Authorization bearer XXXXX
我不确定为什么根据您的代码,您应该调试并查看您发送的值。但它应该是:
Authorization: bearer XXXXX
我的假设是AuthenticationHeaderValue
正在做一些你并不期待的事情。搜索文档时,您似乎正确地执行了操作 - 因此我不确定C#代码究竟出了什么问题,只是您发送的标头不正确。
答案 1 :(得分: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;