asp.net - 请求正文参数错误的请求 API HttpClient
问题描述
我收到“错误请求”:“card_number 应仅包含数字”,试图使用 API。我究竟做错了什么?有人能帮忙吗?
API 参数必须是:
标头参数
- 内容类型=“应用程序/json;字符集=utf-8”
- 授权 = "承载 AuthString"
- 卖家id =“字符串”
请求体
- card_number = "字符串"
- 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();
}
解决方案
您正在尝试发送请求,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();
}