我目前正在尝试使用C#(API)发送POST请求,但是我对内容类型和授权存在一些麻烦,因为其格式为apiHash,apiKey。
卷曲示例:
curl -i -XPOST https://sandboxapi.g2a.com/v1/order \
-H "Authorization: qdaiciDiyMaTjxMt, 74026b3dc2c6db6a30a73e71cdb138b1e1b5eb7a97ced46689e2d28db1050875" \
-H 'Content-Type: application/json' \
-d '{"product_id": "10000027819004", "max_price": 45.0}'
API文档: https://www.g2a.com/integration-api/documentation/#api-Orders-AddOrder
这是我到目前为止的代码:
private static readonly HttpClient client = new HttpClient();
public async Task < string > makeRequest() {
var values = new Dictionary < string,
string > {
{
"product_id",
"10000027819004"
},
{
"max_price",
"45.0"
}
};
var content = new FormUrlEncodedContent(values);
AuthenticationHeaderValue authHeaders = new AuthenticationHeaderValue("qdaiciDiyMaTjxMt", "74026b3dc2c6db6a30a73e71cdb138b1e1b5eb7a97ced46689e2d28db1050875");
client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json; charset=utf-8");
client.DefaultRequestHeaders.Authorization = authHeaders;
var response = await client.PostAsync("https://sandboxapi.g2a.com/v1/order", content);
var responseString = await response.Content.ReadAsStringAsync();
return responseString;
}
我尝试了多种解决方案,但似乎无法将其全部正确地解决(内容类型,授权和参数)。
答案 0 :(得分:0)
您必须像这样设置内容类型:
client.DefaultRequestHeaders
.Accept
.Add(new MediaTypeWithQualityHeaderValue("application/json"));
这将解决问题。
答案 1 :(得分:0)
在curl示例发送JSON时,您正在发送不是JSON的FormUrlEncodedContent
。
重构您的方法,以在StringContent
中使用设置了正确内容类型的实际序列化JSON字符串。
public async Task<string> makeRequest() {
var values = new {
product_id = "10000027819004",
max_price = 45.0
};
//-d '{"product_id": "10000027819004", "max_price": 45.0}'
var json = JsonConvert.SerializeObject(values); //using Json.Net
var content = new StringContent(json);
var auth = "qdaiciDiyMaTjxMt, 74026b3dc2c6db6a30a73e71cdb138b1e1b5eb7a97ced46689e2d28db1050875";
//-H "Authorization: qdaiciDiyMaTjxMt, 74026b3dc2c6db6a30a73e71cdb138b1e1b5eb7a97ced46689e2d28db1050875" \
client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", auth);
//-H 'Content-Type: application/json' \
client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json");
var response = await client.PostAsync("https://sandboxapi.g2a.com/v1/order", content);
var responseString = await response.Content.ReadAsStringAsync();
return responseString;
}