【问题标题】:Error creating Calendly webhook subscription with .Net HttpClient()使用 .Net HttpClient() 创建 Calendly webhook 订阅时出错
【发布时间】:2017-11-10 16:41:28
【问题描述】:

我正在尝试使用 .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 调用来测试基本令牌,它运行良好。

有什么建议吗?

【问题讨论】:

    标签: c# curl dotnet-httpclient calendly


    【解决方案1】:

    终于回来了,当我再次查看代码时,它就明白了。

    最初我将整个 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 或发布 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);
        }
    

    希望这对某人有所帮助!

    【讨论】:

      猜你喜欢
      • 2017-12-27
      • 2020-09-12
      • 2018-10-07
      • 2014-11-20
      • 2021-02-18
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 2015-10-10
      相关资源
      最近更新 更多