C#CURL POST(内容类型,散列键)
我目前正试图用C#(API)发送POST请求,但我在内容类型和授权方面遇到了一些问题,因为它的格式是apiHash,apiKey 卷曲示例:C#CURL POST(内容类型,散列键),c#,api,asynchronous,post,httpclient,C#,Api,Asynchronous,Post,Httpclient,我目前正试图用C#(API)发送POST请求,但我在内容类型和授权方面遇到了一些问题,因为它的格式是apiHash,apiKey 卷曲示例: curl -i -XPOST https://sandboxapi.g2a.com/v1/order \ -H "Authorization: qdaiciDiyMaTjxMt, 74026b3dc2c6db6a30a73e71cdb138b1e1b5eb7a97ced46689e2d28db1050875" \ -H 'Content-Type: app
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的文档:
这是我到目前为止的代码:
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;
}
private static readonly HttpClient=new HttpClient();
公共异步任务makeRequest(){
var values=新字典<字符串,
字符串>{
{
“产品标识”,
"10000027819004"
},
{
“最高价格”,
"45.0"
}
};
var内容=新的FormUrlEncodedContent(值);
AuthenticationHeaderValue authHeaders=新的AuthenticationHeaderValue(“qdaiciDiyMaTjxMt”,“74026b3dc2c6db6a30a73e71cdb138b1e1b5eb7a97ced46689e2d28db1050875”);
client.DefaultRequestHeaders.TryAddWithoutValidation(“内容类型”,“应用程序/json;字符集=utf-8”);
client.DefaultRequestHeaders.Authorization=authHeaders;
var response=wait client.PostAsync(“https://sandboxapi.g2a.com/v1/order“,内容);
var responseString=await response.Content.ReadAsStringAsync();
回报率;
}
我尝试了多种解决方案,但似乎无法将所有解决方案(内容类型、授权和参数)结合在一起 必须按如下方式设置内容类型:
client.DefaultRequestHeaders
.Accept
.Add(new MediaTypeWithQualityHeaderValue("application/json"));
这将解决问题。您正在发送的
FormUrlEncodedContent
不是JSON,而curl示例正在发送JSON
重构您的方法,在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;
}
public异步任务makeRequest(){
var值=新值{
product_id=“1000002781904”,
最高价格=45.0
};
//-d'{“产品id”:“1000002781904”,“最高价格”:45.0}”
var json=JsonConvert.SerializeObject(值);//使用json.Net
var content=新的StringContent(json);
var auth=“qdacidiymatjxmt,74026b3dc2c6db6a30a73e71cdb138b1e1b5eb7a97ced46689e2d28db1050875”;
//-H“授权:QDACIDIYMATXMT,74026b3dc2c6db6a30a73e71cdb138b1e1b5eb7a97ced46689e2d28db1050875”\
client.DefaultRequestHeaders.TryAddWithoutValidation(“Authorization”,auth);
//-H'内容类型:应用程序/json'\
client.DefaultRequestHeaders.TryAddWithoutValidation(“内容类型”、“应用程序/json”);
var response=wait client.PostAsync(“https://sandboxapi.g2a.com/v1/order“,内容);
var responseString=await response.Content.ReadAsStringAsync();
回报率;
}
您执行POST时的响应是什么?当前其内容类型标题为空或不允许。请告诉您何时尝试。您好,尝试过,但仍显示内容类型标题为空或不允许。您好,我刚刚尝试过,但是它仍然说内容类型头是空的或不允许的。提供的代码是准确的,所以只剩下检查两种方法发送的原始请求,看看有什么区别。仍然不起作用,但很奇怪,我已经检查过了,内容类型现在在标题中<代码>代码标题:{授权:qdacidiymatjxmt,74026b3dc2c6db6a30a73e71cdb138b1e1b5eb7a97ced46689e2d28db1050875内容类型:application/json;charset=utf-8内容长度:48}代码
@Restr我删除了utf编码,看看这是否有区别。