![](/img/trans.png)
[英]How to convert a curl containing --data-urlencode to a HttpClient call?
[英]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.