[英]getting server error 500, 'Internal Server Error', but works fine on Postman, using httpclient in c#
[英]c# - HttpClient InternalServerError 500 - Works in postman, but not in code
我正在尝试向以下 API 端点发送 GET 请求:
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
复制粘贴到邮递员中,就可以得到所需的结果,但是无论我做什么,我都无法在程序中复制它,而且我不确定应该如何继续调试问题。
有人有什么好主意吗?
你需要做的两件事:
所以我想通了这个问题。 似乎邮递员会自动转义网址中的引号等,但 c# 不会。 我通过在param
上添加Uri.EscapeUriString()
解决了这个问题。
一种解决方案是 DeserializeObject 来自 Postman 的内容。 当我的自动化测试有效但 Postamn 请求无效时,我遇到了类似的问题。
就我而言,我是这样做的
try
{
Foo[prop] = JsonConvert.DeserializeObject(stringValue);
}
catch
{
Foo[prop] = stringValue;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.