嗨,我一直在努力地将重定向URL注册到Kaizal webhook(它从Microsoft像whatsapp之类的Microsoft聊天应用程序)注册,我已经创建了asp.net API控制器以在Kaizala webhook中注册它。我想做的是,无论何时在Kaizala Group上创建一个Messenger或Job时,我的重定向URL都会捕获数据并将数据保存到我的数据库中。我认为我已经满足了https://docs.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方法仍然不执行任何操作,只是返回statuscode。

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();


最有可能是null引用异常,因为您在链接文档说明时尝试访问标头中的令牌


  Kaizala将生成一个验证令牌,并使用查询参数“ validationToken”将GET请求发送到您的Webhook。


重点矿

这在更新使用中避免了

HttpContext.Request.Query["validationToken"]


我建议将语法更新为

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


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

我建议以上内容,因为根据文档不能保证令牌将是有效的int。即使是这样,如果它们确实不再使用整数作为标记,那么这种方法将更加灵活。

要求简单说明


  您的服务应该以纯文本形式返回响应正文中的验证令牌(在请求中接收)


这样,仅返回完全发送的内容。不要尝试对其进行任何更改。

10-08 02:22