嗨,我一直在努力地将重定向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
。即使是这样,如果它们确实不再使用整数作为标记,那么这种方法将更加灵活。要求简单说明
您的服务应该以纯文本形式返回响应正文中的验证令牌(在请求中接收)
这样,仅返回完全发送的内容。不要尝试对其进行任何更改。