如何将 Curl 命令转换为 .net HttpClient post 调用
How to convert Curl command to .net HttpClient post call
我想知道如何将此 curl 片段转换为 .net HttpClient 作为 Post 请求。从下图中获取从服务器返回的 500 错误。
这是用于 ConvertKit 创建 webhook 的 curl 命令。
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" } }'
Link供参考: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
编码类似于查询字符串的 key-value 对。您基本上是在告诉它发送 URL-encoded key-value 对,其中最后一个值是 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
是您将其转义以便将其用作 属性 名称的方式。
我想知道如何将此 curl 片段转换为 .net HttpClient 作为 Post 请求。从下图中获取从服务器返回的 500 错误。
这是用于 ConvertKit 创建 webhook 的 curl 命令。
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" } }'
Link供参考: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
编码类似于查询字符串的 key-value 对。您基本上是在告诉它发送 URL-encoded key-value 对,其中最后一个值是 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
是您将其转义以便将其用作 属性 名称的方式。