Survey Monkey在请求标头错误中给我一个无效的授权

时间:2016-10-12 14:26:57

标签: authorization httpclient surveymonkey

我正在使用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()部分错误。或其他什么?

2 个答案:

答案 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;