C# HttpClient调用API报InternalServerError 500:Postman正常代码异常
搞定MediaHound API的/graph/lookup端点GET请求
嘿,既然你已经把/search/all端点的请求在Postman和C#里都跑通了,那咱们来搞定/graph/lookup这个端点的请求吧!先回顾下你之前的可行代码:
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相关的执行代码 }
/graph/lookup的特殊点在于参数是通过params=PARAMS_JSON传递的——也就是要把你的查询参数序列化成JSON字符串,再作为查询参数的值传进去。这里给你写个适配的C#代码示例:
// 第一步:按照API要求构造参数对象 var lookupParams = new { // 替换成你实际需要的参数,比如媒体ID、要包含的关联数据等 ids = new[] { "sample-media-id-123" }, include = new[] { "related-content", "metadata" } }; // 第二步:把参数序列化为JSON字符串(这里用Newtonsoft.Json,也可以用System.Text.Json) var jsonParams = Newtonsoft.Json.JsonConvert.SerializeObject(lookupParams); // 关键:对JSON字符串做URL编码,避免特殊字符破坏URL结构 var encodedParams = Uri.EscapeDataString(jsonParams); var baseUri = new Uri("https://api.mediahound.com/1.3/graph/lookup"); using (var client = new HttpClient()) { // 同样要设置Bearer Token授权头 client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _oAuth2.Token); // 拼接完整的请求URL var requestUri = new Uri($"{baseUri}?params={encodedParams}"); // 发送请求并处理响应(记得用await异步执行) var response = await client.GetAsync(requestUri); // 确保请求成功,否则会抛出异常 response.EnsureSuccessStatusCode(); var res = await response.Content.ReadAsStringAsync(); // 这里可以把res反序列化为你需要的实体对象 }
这里有几个要注意的点:
- 一定要保证参数的JSON结构完全符合MediaHound API的文档要求,字段名、数据类型都不能错,不然会返回错误响应
- 如果你的项目用的是
System.Text.Json而不是Newtonsoft.Json,把序列化代码换成System.Text.Json.JsonSerializer.Serialize(lookupParams)就行 - URL编码这一步不能省,JSON里的引号、大括号这些字符直接放在URL里会导致请求失败
- 和第一个端点一样,要确保你的Bearer Token是有效的,不然会得到401未授权的响应
内容的提问来源于stack exchange,提问作者Jonas Mohammed
相关产品推荐
相关产品推荐

