使用 POST 方法从服务器接收数据,并使用 C# 中的 WebClient 请求正文

问题描述

我正在尝试使用 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),并且工作正常。

enter image description here

我知道我没有正确格式化请求。有人可以帮我吗。

解决方法

非常感谢@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 中找到有关此的更多信息。