首页 > 解决方案 > 请求正文参数错误的请求 API HttpClient

问题描述

我收到“错误请求”:“card_number 应仅包含数字”,试图使用 API。我究竟做错了什么?有人能帮忙吗?

在此处输入图像描述

API 参数必须是:

标头参数

  1. 内容类型=“应用程序/json;字符集=utf-8”
  2. 授权 = "承载 AuthString"
  3. 卖家id =“字符串”

请求体

  1. card_number = "字符串"
  2. customer_id = "字符串"

[邮政]

"curl -X POST \\nhttps://api-sandbox.getnet.com.br/v1/tokens/card \\nH '授权:承载 ca22a2ge-1914-4b0c-a0fb-d3ce0fde7346' \\nH '内容类型: 应用程序/json; charset=utf-8' \\nd '{\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();
     }

标签: asp.netasp.net-coredotnet-httpclientbad-request

解决方案


您正在尝试发送请求,application/json但您将正文参数指定为application/x-www-form-urlencoded(使用FormUrlEncodedContent类)。只需更改您的代码以发送 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();
}

推荐阅读