Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#CURL POST(内容类型,散列键)_C#_Api_Asynchronous_Post_Httpclient - Fatal编程技术网

C#CURL POST(内容类型,散列键)

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

我目前正试图用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的文档:

这是我到目前为止的代码:

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编码,看看这是否有区别。