C#CURL POST(内容类型,哈希键)

时间:2018-08-15 09:42:26

标签: 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: 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;
}

我尝试了多种解决方案,但似乎无法将其全部正确地解决(内容类型,授权和参数)。

2 个答案:

答案 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;
}