请求 Body 参数错误请求 API HttpClient

Request Body Parameters Bad Request API HttpClient

我得到 "Bad Request":"card_number should contain numbers only",正在尝试消耗一个 API。 我究竟做错了什么?有人可以帮忙吗?

API 参数必须是:

Header 参数

  1. Content-type = "application/json; charset=utf-8"
  2. 授权="Bearer AuthString"
  3. seller_id = "string "

RequestBody

  1. card_number = "string"
  2. customer_id = "string"

[POST]

"curl -X POST \nhttps://api-sandbox.getnet.com.br/v1/tokens/card \n-H 'authorization: Bearer ca22a2ge-1914-4b0c-a0fb-d3ce0fde7346' \n-H 'content-type: application/json; charset=utf-8' \n-d '{\n \"card_number\": \"4012001037141112\"\n}'\n"

    public async Task<IActionResult> AuthGetToken()
    {
        using (var httpClient = new HttpClient())
        {
            parameters = new List<KeyValuePair<string, string>>()
            {
                new KeyValuePair<string, string>("card_number", "4012001037141112"), //(APi's card number given for tests purpose)
                new KeyValuePair<string, string>("customer_id", "custumer123")
            };

            requestMessage = new HttpRequestMessage()
            {
                Method = new HttpMethod("POST"),
                RequestUri = new Uri("https://api-sandbox.getnet.com.br/v1/tokens/card"),
                Content = new FormUrlEncodedContent(parameters)
            };
            requestMessage.Headers.Clear();
            requestMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            requestMessage.Headers.Add("Authorization", "Bearer ca22a2ge-1914-4b0c-a0fb-d3ce0fde7346");
            requestMessage.Headers.Add("seller_id", "61c53d30-0d7f-3cf0-7662-c61714942d46");

            response = await httpClient.SendAsync(requestMessage);
            responseStatusCode = response.StatusCode;
            responseBody = await response.Content.ReadAsStringAsync();
            response.EnsureSuccessStatusCode();
        }

        return View();
     }

您正尝试以 application/json 的形式发送请求,但您将正文参数指定为 application/x-www-form-urlencoded(使用 FormUrlEncodedContent class)。只需更改您的代码以发送 json 字符串而不是

public class MyRequest
{
    [JsonProperty("card_number")]
    public string CardNumber { get; set; }

    [JsonProperty("customer_id")]
    public string CustomerId { get; set; }
}

using (var httpClient = new HttpClient())
{
    var request = new MyRequest
    {
        CardNumber = "4012001037141112",
        CustomerId = "custumer123"
    };

    var requestBody = JsonConvert.SerializeObject(request);

    var requestMessage = new HttpRequestMessage()
    {
        Method = new HttpMethod("POST"),
        RequestUri = new Uri("https://api-sandbox.getnet.com.br/v1/tokens/card"),
        Content = new StringContent(requestBody, Encoding.UTF8, "application/json")
    };
    requestMessage.Headers.Add("Authorization", "Bearer ca22a2ge-1914-4b0c-a0fb-d3ce0fde7346");
    requestMessage.Headers.Add("seller_id", "61c53d30-0d7f-3cf0-7662-c61714942d46");

    var response = await httpClient.SendAsync(requestMessage);
    var responseStatusCode = response.StatusCode;
    var responseBody = await response.Content.ReadAsStringAsync();
    response.EnsureSuccessStatusCode();
}