簡體   English   中英

如何將Curl命令轉換為.net HttpClient帖子調用

[英]How to convert Curl command to .net HttpClient post call

我試圖弄清楚如何將這個curl片段轉換為Post請求的.net HttpClient。 下圖從服務器返回500錯誤。

這是curl命令,用於ConvertKit創建Webhook。

curl -X POST https://api.convertkit.com/v3/automations/hooks
 -H 'Content-Type: application/json'\
 -d '{ "api_secret": "<your_secret_api_key>",\
       "target_url": "http://example.com/incoming",\
       "event": { "name": "subscriber.subscriber_activate" } }'

參考鏈接: http : //developers.convertkit.com/#webhooks

這是我的.net代碼段:

private static async Task<HttpResponseMessage> PostConverkitCreateWebhookSubscription()
{
        var client = new HttpClient {BaseAddress = new Uri("https://api.convertkit.com ") };
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        dynamic event1 = new ExpandoObject();
        event1.name = "subscriber.subscriber_activate";
        var customEvent = JsonConvert.SerializeObject(event1);

        var keyValues = new List<KeyValuePair<string, string>>
        {
            new KeyValuePair<string, string>("api_secret", "<your_secret_api_key>"),
            new KeyValuePair<string, string>("target_url","http://example.com/incoming"),
            new KeyValuePair<string, string>("event", customEvent)
        };

        var request = new HttpRequestMessage(HttpMethod.Post, "/v3/automations/hooks")
            {
                Content = new FormUrlEncodedContent(keyValues)
            };
        return await client.SendAsync(request);
}

遇到錯誤500,因此我可能會對他們的服務器造成嚴重破壞。

在此處輸入圖片說明

可能是可能發生事件的JSON對象...不確定..需要幫助

FormUrlEncodedContent編碼類似於查詢字符串的鍵值對。 您基本上是在告訴它發送URL編碼的鍵值對,其中最后一個值是JSON編碼的。 因此,您的請求正文將如下所示:

api_secret=<your_secret_api_key>&target_url=http://example.com/incoming&event={"name":"subscriber.subscriber_activate"}

但是API希望整個有效負載均采用JSON編碼。 這個修改后的版本應該可以解決這個問題:

var data = new
{
    api_secret = "<your_secret_api_key>",
    target_url = "http://example.com/incoming",
    @event = new
    {
        name = "subscriber.subscriber_activate"
    }
};
var json = JsonConvert.SerializeObject(data); // json-encode everything, not just event

var client = new HttpClient { BaseAddress = new Uri("https://api.convertkit.com ") };
var content = new StringContent(json, Encoding.UTF8, "application/json");
return await client.PostAsync("/v3/automations/hooks", content);

另外, event是C#中的保留字; @event是您如何對其進行轉義以將其用作屬性名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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