我有用 JavaScript 编写的请求,效果很好
fetch(someUrl, {
"headers": { someHeader1, someHeader2, /* and so on... */ },
"body": someBody,
"method": "POST"
});
我也有用 C# 编写的完全相同的请求,但根本不起作用
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add(someHeader1);
client.DefaultRequestHeaders.Add(someHeader2); // and so on...
var content = new StringContent(someBody);
var response = await client.PostAsync(someUrl, content);
现在我需要找出 C# 代码中的错误来修复它。我怎样才能将这两个代码片段转换为相同的表示形式,以便能够看到它们之间有什么区别?
由于我无法将问题和评论都标记为两个正确答案,这有助于解决我的问题,因此我会将必要的信息重写为单个帖子。
正如 Charlieface 所建议的,像 Fiddler 这样的工具可以记录传出的数据包并以结构化且易于定向的方式显示它们。
检查数据包详细信息后,我们会发现,.DefaultRequestHeader() 方法会默默地忽略我们设置 url 编码标头的尝试。
正如Lee Dungx建议的,我们必须使用FormUrlEncoded对象来正确设置上述标头,之后我们的程序开始工作。
编辑你的代码,你可以尝试:
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add(someHeader1);
client.DefaultRequestHeaders.Add(someHeader2); // and so on...
var content = new FormUrlEncodedContent(new[]{
new KeyValuePair<string, string>("", someBody)
});
var response = await client.PostAsync(someUrl, content);