繁体   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