C# 使用.Net HttpClient()创建日历webhook订阅时出错
我正在尝试使用.net HttpClient()为Calendly创建webhook订阅 我正在尝试将此Curl命令转换为.NetC# 使用.Net HttpClient()创建日历webhook订阅时出错,c#,curl,dotnet-httpclient,calendly,C#,Curl,Dotnet Httpclient,Calendly,我正在尝试使用.net HttpClient()为Calendly创建webhook订阅 我正在尝试将此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 curl--heade
curl --header "X-TOKEN: <your_token>" --data "url=https://blah.foo/bar&events[]=invitee.created&events[]=invitee.canceled" https://calendly.com/api/v1/hooks
curl--header“X-TOKEN:”--data”url=https://blah.foo/bar&events[]=invitee.created&events[]=invitee.cancelled”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);
}
私有静态异步任务PostCreateWebhookSubscription()
{
var client=new-HttpClient{BaseAddress=new-Uri(“https://calendly.com")};
var request=newhttprequestmessage(HttpMethod.Post,“/api/v1/hooks/”;
var keyValues=新列表
{
新的KeyValuePair(“url”,
"https://requestb.in/17ruxqh1&events[]=invitee.created&events[]=invitee.cancelled”)
};
request.Content=newformurlencodedcontent(keyValues);
request.Content.Headers.ContentType=new-MediaTypeHeaderValue(“application/x-www-form-urlencoded”){CharSet=“UTF-8”};
request.Content.Headers.Add(“X-TOKEN”和“”);
返回wait client.sendaync(请求);
}
我得到了这个错误422错误,但无法弄清楚要改变什么才能使它工作
获取不可处理实体时出错
{“类型”:“验证\错误”,“消息”:“验证失败”,“错误”:{“事件”:[“不能为空”]}
我能够运行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=新列表
{
新的KeyValuePair(“url”,
"https://requestb.in/17ruxqh1&events[]=invitee.created&events[]=invitee.cancelled”)
};
应更改为将每个值与其文档分开:
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")
};
var keyValues=新列表
{
新的KeyValuePair(“url”https://requestb.in/17ruxqh1"),
新的KeyValuePair(“events[]”,“invitee.created”),
新的KeyValuePair(“事件[]”,“被邀请者已取消”)
};
因此,对于那些希望使用.Net来使用Calendally创建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);
}
[TestMethod]
public void createCalendaryWebHookSubscription()的
{
var task=PostCreateWebhookSubscription();
task.Wait();
var response=task.Result;
var body=response.Content.ReadAsStringAsync().Result;
}
私有静态异步任务PostCreateWebhookSubscription()
{
var client=new-HttpClient{BaseAddress=new-Uri(“https://calendly.com")};
var request=newhttprequestmessage(HttpMethod.Post,“/api/v1/hooks/”;
var keyValues=新列表
{
新的KeyValuePair(“url”https://requestb.in/17ruxqh1"),
新的KeyValuePair(“events[]”,“invitee.created”),
新的KeyValuePair(“事件[]”,“被邀请者已取消”)
};
request.Content=newformurlencodedcontent(keyValues);
request.Content.Headers.ContentType=new-MediaTypeHeaderValue(“application/x-www-form-urlencoded”){CharSet=“UTF-8”};
request.Content.Headers.Add(“X-TOKEN”和“”);
返回wait client.sendaync(请求);
}
希望这对别人有帮助