我尝试将GET请求发送到以下API端点:
https://api.mediahound.com/1.3/search/all?PARAM_STRING
https://api.mediahound.com/1.3/graph/lookup?params=PARAMS_JSON
第一个可以正常使用以下代码(在postman和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
粘贴到邮递员中,即可获得所需的结果,但无论我做什么,我都无法在程序中复制,而且我也可以我不确定如何继续调试问题。
任何人都有一些好主意?
答案 0 :(得分:0)
您需要做两件事 1:你需要通过fiddler检查请求标头,如果发现任何间隙填满它。 2:最重要的是,在代码中记录带参数的完整URL。在邮递员中使用相同的URL,希望你会得到这个问题。
答案 1 :(得分:0)
所以我想出了这个问题。似乎邮递员在网址中自动转义引号等,但c#没有。我在Uri.EscapeUriString()
上添加param
解决了这个问题。
答案 2 :(得分:-1)
一种解决方案是DeserializeObject,这是我们Postman公司的产品。当我的自动化测试正常工作时,我遇到了类似的问题,但Postamn请求却没有。
就我而言,我确实是这样
try
{
Foo[prop] = JsonConvert.DeserializeObject(stringValue);
}
catch
{
Foo[prop] = stringValue;
}