【发布时间】:2018-04-23 17:50:01
【问题描述】:
我正在尝试将 GET 请求发送到以下 API 端点:
https://api.mediahound.com/1.3/search/all?PARAM_STRING
https://api.mediahound.com/1.3/graph/lookup?params=PARAMS_JSON
第一个适用于以下代码(在邮递员和 c# 中):
var baseUri = new Uri("https://api.mediahound.com/1.3/search/all/");
using (var client = new HttpClient())
{
var res = "";
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _oAuth2.Token);
Task task = Task.Run(async () => { res = await client.GetStringAsync(baseUri + searchInput + "?type=movie"); });
task.Wait();
.....
}
第二个我无法上班,它给了我一个InternalServerError 回复。目前看起来是这样的:
public async Task<ObservableCollection<Movie>> GetMoviesAsync(string id)
{
var baseUri = new Uri("https://api.mediahound.com/1.3/graph/lookup?params=");
using (var client = new HttpClient())
{
var param = "{\n\"ids\":\n[\"" + id + "\"],\n\"components\":\n[\"primaryImage\",\n\"keyTraits\"]\n}";
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _oAuth2.Token);
var res = await client.GetAsync(baseUri + param);
if(!res.IsSuccessStatusCode)
{
throw new Exception("HttpClient Error: " + res.StatusCode); //InternalServerError 500
}
var content = await res.Content.ReadAsStringAsync();
.....
}
}
只需将baseUri + param 复制粘贴到邮递员中,即可获得所需的结果,但是无论我做什么,我都无法在程序中复制它,而且我不确定应该如何继续调试问题。
有人有什么好主意吗?
【问题讨论】:
-
我想开始尝试比较发送到服务器的 POSTMAN 和浏览器网络选项卡的请求标头。
-
这个 api 是在你的控制之下,还是一个返回内部服务器错误的外部 api。
-
@Igor 这是一个外部api,我无法控制它。我不确定在哪里可以看到所有标题,调试说它们都是空/空,除了承载。 pastebin.com/vFjAWvCP
-
@user1672994 是的,我之前尝试过,但我没有使用 Fiddler 的经验。到目前为止,它跟踪邮递员请求和有效的搜索请求,但是我无法让它显示失败的请求。 i.imgur.com/o6B0NyC.png #13 是邮递员,#21 是有效的“搜索”,但最后一个请求没有显示任何内容。
标签: c# rest httpclient internal-server-error http-status-code-500