c# - 如何将重定向 URL 注册到 webhook

标签 c# asp.net webhooks kaizala

您好,我一直在努力将重定向 url 注册到 Kaizal webhook(它来自 Microsoft 的聊天应用程序,就像一个 whatsapp),我创建了 asp.net API Controller 以在我的 Kaizala webhook 中注册它。我想要做的是,每当在 Kaizala Group 上创建消息或作业时,我的重定向 url 将捕获数据并将数据保存到我的数据库中。我想我已经满足了这里的所有要求 https://learn.microsoft.com/en-us/kaizala/connectors/webhookvalidaton ,我的 Get 方法已经从 Header 返回 validationToken。但是当我尝试注册我的重定向 URL 时它总是返回此错误 "message": "Callback URL couldn't be validated. StatusCode = InternalServerError",.

https://kaizala007.blog/2017/12/30/exploring-kaizala-webhooks/comment-page-1/#comment-3776 从这个文档中,他说我需要同时支持 get 和 post 方法,已经添加了这两个方法,但我的 post 方法仍然没有做任何事情,只是返回状态码。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web;
using System.Web.Http;

namespace KaizalaTestApi.Controllers
{

    public class KaizalaCallbackController : ApiController
    {
        // GET: KaizalaCallback
        [HttpGet]
        public string Get()
        {
            string x = Request.Headers.GetValues("validationToken").FirstOrDefault().ToString();
            return x;
        }

        [HttpPost]
        public HttpResponseMessage Post()
        {
            //string validationToken = Request.Headers.GetValues("validationToken").FirstOrDefault().ToString();
            //string data = new StreamReader(Request.Content).ReadToEnd();
            string str = Request.Content.ReadAsStringAsync().Result;

            return Request.CreateResponse(HttpStatusCode.OK);
        }
    }
}

为什么我会收到那个错误?我需要在我的 post 方法中做任何特定的事情才能让它工作吗?

最佳答案

您返回 int 并不是它起作用的事实。

第一次尝试失败,调用时出错

Request.Headers.GetValues("validationToken").FirstOrDefault().ToString();

很可能是空引用异常,因为您试图访问 header 中的 token ,而链接文档指出

Kaizala will generate a validation token and send a GET request to your webhook with a query parameter “validationToken”.

强调我的

在更新使用中避免了

HttpContext.Request.Query["validationToken"]

我建议将语法更新为

[HttpGet]
public IActionResult Get() {
    var validationToken = Request.Query["validationToken"];
    return Content(validationToken);
}

当然,您可以重构为预期的查询字符串参数添加验证代码。

我提出以上建议是因为不能保证 token 将是基于文档的有效 int。即使是这样,如果他们真的不再使用整数作为标记,这种方法也会更加灵活。

要求简单说明

Your service is supposed to return the validation token (received in request) in the response body as a plain-text

有了它,只准确返回发送的内容。不要尝试对其进行任何更改。

关于c# - 如何将重定向 URL 注册到 webhook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54214079/

相关文章:

C#-DDD : Which layer DTO belong into?

c# - 为应用程序用户分配角色

google-apps-script - Slack > Gsheet > VLookup > Slack

node.js - Google Action Webhook 实现

c# - 使用 LINQ 查找存在于两个集合中的元素

c# - 如果每个时间跨度发生/发生超过 N 次,我如何设置 log4net 来记录某些事件?

c# - ASP.NET:多台服务器上的 SHA1 + Salt 密码哈希

asp.net - RadioButton 控件控件下的文字换行

c# - 如何检查表格何时插入新行,然后使用 UpdatePane 自动更新 Repeater

mysql - 在不使用参数计划的情况下在 mysql 数据库中输入新数据时通知 Logstash