为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
冉冉说 2021-11-28 19:46:12
我目前正在尝试在 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 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

您必须像这样设置内容类型:

client.DefaultRequestHeaders
  .Accept
  .Add(new MediaTypeWithQualityHeaderValue("application/json"));

这将解决问题。


查看完整回答
反对 回复 2021-11-28
?
慕容708150

TA贡献1831条经验 获得超4个赞

您发送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;

}


查看完整回答
反对 回复 2021-11-28
  • 2 回答
  • 0 关注
  • 337 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信