问题描述
我正在尝试使用 POST 方法从服务器接收数据,并且请求应该有一个正文。我为此使用 WebClient 并尝试以字符串形式返回响应。我知道我们可以使用 HttpClient 来实现这一点。但我想在这个特定实例中使用 WebClient。
我经历了这个 post 并尝试了 UploadString
,响应给了我一个 400 BAD 请求。
using (var wc = new WebClient())
{
wc.Headers.Add("Accept: application/json");
wc.Headers.Add("User-Agent: xxxxxxx");
wc.Headers.Add($"Authorization: Bearer {creds.APIKey.Trim()}");
var jsonString = JsonConvert.SerializeObject(new UserRequestBody
{
group_id = userDetails.data.org_id
});
var response = wc.UploadString("https://api.xxxxx.yyy/v2/users","POST",jsonString);
}
我使用 Postman 测试了端点(请求标头具有 api 密钥,请求正文为 JSON),并且工作正常。
我知道我没有正确格式化请求。有人可以帮我吗。
解决方法
非常感谢@Santiago Hernández。问题是在请求标头中使用了 wc.Headers.Add("Accept: application/json");
。将其更改为 wc.Headers.Add("Content-Type: application/json");
会返回 200 Ok 响应。代码修改如下
using (var wc = new WebClient())
{
wc.Headers.Add("Content-Type: application/json");
wc.Headers.Add("User-Agent: xxxxxxx");
wc.Headers.Add($"Authorization: Bearer {creds.APIKey.Trim()}");
var jsonString = JsonConvert.SerializeObject(new UserRequestBody
{
group_id = userDetails.data.org_id
});
var response = wc.UploadString("https://api.xxxxx.yyy/v2/users","POST",jsonString);
}
Accept
告诉服务器客户端将接受的响应类型,而 Content-type
是关于当前请求或响应的负载/内容。如果请求没有有效负载/正文,请勿使用 Content-type
。
可以在 here 中找到有关此的更多信息。