簡體   English   中英

C#CURL POST(內容類型,哈希鍵)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM