使用 .Net HttpClient() 创建 Calendly webhook 订阅时出错
Error creating Calendly webhook subscription with .Net HttpClient()
我正在尝试使用 .net HttpClient() 为 Calendly 创建 webhook 订阅
https://developer.calendly.com/docs/webhook-subscriptions
我正在尝试将此 Curl 命令转换为 .Net
curl --header "X-TOKEN: <your_token>" --data "url=https://blah.foo/bar&events[]=invitee.created&events[]=invitee.canceled" https://calendly.com/api/v1/hooks
这是我的 .Net 代码:
private static async Task<HttpResponseMessage> PostCreateWebhookSubscription()
{
var client = new HttpClient {BaseAddress = new Uri("https://calendly.com")};
var request = new HttpRequestMessage(HttpMethod.Post, "/api/v1/hooks/");
var keyValues = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("url",
"https://requestb.in/17ruxqh1&events[]=invitee.created&events[]=invitee.canceled")
};
request.Content = new FormUrlEncodedContent(keyValues);
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded") {CharSet = "UTF-8"};
request.Content.Headers.Add("X-TOKEN", "<my_calendly_token>");
return await client.SendAsync(request);
}
我收到此错误 422 错误,但无法弄清楚要更改什么才能使其正常工作。
收到无法处理的实体错误
{"type":"validation_error","message":"Validation failed","errors":{"events":["can't be blank"] }}
我能够 运行 Curl 命令,它在同一台机器上工作正常,所以我知道它正在工作。
我创建了一个 .net HttpClient 调用来测试基本令牌,它运行良好。
有什么建议吗?
终于回来了,再看代码就明白了。
本来我是把整个URL看成一个大字符串,但一开始没有意识到分隔要传递的值的&符号。
下面的错误代码:
var keyValues = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("url",
"https://requestb.in/17ruxqh1&events[]=invitee.created&events[]=invitee.canceled")
};
应该更改为将每个值从文档中分离出来:
var keyValues = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("url","https://requestb.in/17ruxqh1"),
new KeyValuePair<string, string>("events[]","invitee.created"),
new KeyValuePair<string, string>("events[]","invitee.canceled")
};
因此,对于那些想要使用 .Net 通过 Calendly 创建 webhook 订阅的人来说,这里有一个完整的 TestMethod 代码可以试用。只需将第一个参数替换为您的 requestb.in 或 post url。同时放入您的 Calendly api 键。
[TestMethod]
public void CreateCalendlyWebhookSubscription()
{
var task = PostCreateWebhookSubscription();
task.Wait();
var response = task.Result;
var body = response.Content.ReadAsStringAsync().Result;
}
private static async Task<HttpResponseMessage> PostCreateWebhookSubscription()
{
var client = new HttpClient {BaseAddress = new Uri("https://calendly.com")};
var request = new HttpRequestMessage(HttpMethod.Post, "/api/v1/hooks/");
var keyValues = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("url","https://requestb.in/17ruxqh1"),
new KeyValuePair<string, string>("events[]","invitee.created"),
new KeyValuePair<string, string>("events[]","invitee.canceled")
};
request.Content = new FormUrlEncodedContent(keyValues);
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded") {CharSet = "UTF-8"};
request.Content.Headers.Add("X-TOKEN", "<your Calendly ApiKey>");
return await client.SendAsync(request);
}
希望这对某人有所帮助!
我正在尝试使用 .net HttpClient() 为 Calendly 创建 webhook 订阅
https://developer.calendly.com/docs/webhook-subscriptions
我正在尝试将此 Curl 命令转换为 .Net
curl --header "X-TOKEN: <your_token>" --data "url=https://blah.foo/bar&events[]=invitee.created&events[]=invitee.canceled" https://calendly.com/api/v1/hooks
这是我的 .Net 代码:
private static async Task<HttpResponseMessage> PostCreateWebhookSubscription()
{
var client = new HttpClient {BaseAddress = new Uri("https://calendly.com")};
var request = new HttpRequestMessage(HttpMethod.Post, "/api/v1/hooks/");
var keyValues = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("url",
"https://requestb.in/17ruxqh1&events[]=invitee.created&events[]=invitee.canceled")
};
request.Content = new FormUrlEncodedContent(keyValues);
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded") {CharSet = "UTF-8"};
request.Content.Headers.Add("X-TOKEN", "<my_calendly_token>");
return await client.SendAsync(request);
}
我收到此错误 422 错误,但无法弄清楚要更改什么才能使其正常工作。
收到无法处理的实体错误
{"type":"validation_error","message":"Validation failed","errors":{"events":["can't be blank"] }}
我能够 运行 Curl 命令,它在同一台机器上工作正常,所以我知道它正在工作。
我创建了一个 .net HttpClient 调用来测试基本令牌,它运行良好。
有什么建议吗?
终于回来了,再看代码就明白了。
本来我是把整个URL看成一个大字符串,但一开始没有意识到分隔要传递的值的&符号。
下面的错误代码:
var keyValues = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("url",
"https://requestb.in/17ruxqh1&events[]=invitee.created&events[]=invitee.canceled")
};
应该更改为将每个值从文档中分离出来:
var keyValues = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("url","https://requestb.in/17ruxqh1"),
new KeyValuePair<string, string>("events[]","invitee.created"),
new KeyValuePair<string, string>("events[]","invitee.canceled")
};
因此,对于那些想要使用 .Net 通过 Calendly 创建 webhook 订阅的人来说,这里有一个完整的 TestMethod 代码可以试用。只需将第一个参数替换为您的 requestb.in 或 post url。同时放入您的 Calendly api 键。
[TestMethod]
public void CreateCalendlyWebhookSubscription()
{
var task = PostCreateWebhookSubscription();
task.Wait();
var response = task.Result;
var body = response.Content.ReadAsStringAsync().Result;
}
private static async Task<HttpResponseMessage> PostCreateWebhookSubscription()
{
var client = new HttpClient {BaseAddress = new Uri("https://calendly.com")};
var request = new HttpRequestMessage(HttpMethod.Post, "/api/v1/hooks/");
var keyValues = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("url","https://requestb.in/17ruxqh1"),
new KeyValuePair<string, string>("events[]","invitee.created"),
new KeyValuePair<string, string>("events[]","invitee.canceled")
};
request.Content = new FormUrlEncodedContent(keyValues);
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded") {CharSet = "UTF-8"};
request.Content.Headers.Add("X-TOKEN", "<your Calendly ApiKey>");
return await client.SendAsync(request);
}
希望这对某人有所帮助!