Параметры тела запроса Неверный API запроса HttpClient - PullRequest
0 голосов
/ 05 апреля 2020

Я получаю "Плохой запрос": "номер_карты должен содержать только цифры", пытаясь использовать API. Что я делаю неправильно? Может ли кто-нибудь помочь?

enter image description here

Параметры API должны быть:

Параметры заголовка

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

RequestBody

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

[POST]

"curl -X POST \\ n https://api-sandbox.getnet.com.br/v1/tokens/card \\ nH" авторизация: Bearer ca22a2ge-1914-4b0 c -a0fb-d3ce0fde7346 '\\ nH' тип содержимого: application / 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();
     }

1 Ответ

1 голос
/ 06 апреля 2020

Вы пытаетесь отправить запрос как 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();
}
...