![](/img/trans.png)
[英]c# HttpClient post response content-type application/json
[英]C# CURL POST(Content-Type, Hash key)
我目前正在嘗試使用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;
}
我嘗試了多種解決方案,但似乎無法將它們全部正確地結合在一起(內容類型,授權和參數)。
您必須像這樣設置內容類型:
client.DefaultRequestHeaders
.Accept
.Add(new MediaTypeWithQualityHeaderValue("application/json"));
這樣可以解決問題。
當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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.