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

Receive data from server using POST method and with a request body using WebClient in C#

我正在尝试使用 POST 方法从服务器接收数据,请求应该有一个 body。我正在为此使用 WebClient 并尝试以字符串形式返回响应。我知道我们可以使用 HttpClient 来实现这一点。但我想为这个特定实例使用 WebClient。

我经历了这个 post 并尝试了 UploadString,响应给了我一个 400 BAD Request。

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 测试了端点(请求 header 有一个 api 键,请求 body 在 JSON 中)并且它工作正常。

我知道我没有正确格式化请求。谁能帮帮我。

非常感谢@Santiago Hernández。问题是在请求 header 中使用了 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 是关于当前请求或响应的 payload/content。如果请求没有负载,请不要使用 Content-type/body.

有关此的更多信息,请参见 here