如何注册重定向 URL 到 webhook
How to register Redirect URL to webhook
嗨,我一直在努力注册重定向 url 到 Kaizal webhook(它来自微软的聊天应用程序,就像一个 whatsapp),我创建了 asp.net API 控制器来注册它在我的 Kaizala webhook 中。我想要做的是,每当在 Kaizala Group 上创建消息或作业时,我的重定向 url 将捕获数据并将数据保存到我的数据库中。我想我已经满足这里 https://docs.microsoft.com/en-us/kaizala/connectors/webhookvalidaton 的所有要求,我的 Get 方法已经 returning 来自 Header 的 validationToken。但是当我尝试注册我的重定向时总是 return 这个错误 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 方法仍然没有做任何事情只是 return 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 方法中做任何特定的事情才能让它工作吗?
已经找到了如何让它工作,看来我们需要在我们的 get 方法中 return int,我们从查询参数字符串而不是字符串中获取,我使用 asp net core 2.2 来制作我的回调 url。这里看看我的示例代码也保存在数据库中
[HttpGet]
public int Get()
{
int validationToken = Convert.ToInt32(HttpContext.Request.Query["validationToken"]);
return validationToken;
}
[HttpPost]
public void Post([FromBody]JObject rawBody)
{
using (TheoDBContext db = new TheoDBContext())
{
var jsonData = rawBody["data"];
string name = rawBody["fromUserName"].ToString();
string title = jsonData["title"].ToString();
Kaizala newKaizala = new Kaizala();
newKaizala.Name = name;
newKaizala.Question = title;
newKaizala.Answer = "yes";
db.Kaizala.Add(newKaizala);
db.SaveChanges();
}
}
您 returning int
并不是它起作用的事实。
第一次尝试失败,因为调用时出错
Request.Headers.GetValues("validationToken").FirstOrDefault().ToString();
很可能是空引用异常,因为您试图访问 header 中的令牌,而链接文档指出
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);
}
当然你可以重构为预期的查询字符串参数添加验证码。
我提出上述建议是因为不能保证令牌根据文档是有效的 int
。即使是这样,如果他们真的不再使用整数作为标记,这种方法也会更加灵活。
要求简单说明
Your service is supposed to return the validation token (received in request) in the response body as a plain-text
有了这个,只有 return 准确发送了。不要尝试对其进行任何更改。
嗨,我一直在努力注册重定向 url 到 Kaizal webhook(它来自微软的聊天应用程序,就像一个 whatsapp),我创建了 asp.net API 控制器来注册它在我的 Kaizala webhook 中。我想要做的是,每当在 Kaizala Group 上创建消息或作业时,我的重定向 url 将捕获数据并将数据保存到我的数据库中。我想我已经满足这里 https://docs.microsoft.com/en-us/kaizala/connectors/webhookvalidaton 的所有要求,我的 Get 方法已经 returning 来自 Header 的 validationToken。但是当我尝试注册我的重定向时总是 return 这个错误 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 方法仍然没有做任何事情只是 return 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 方法中做任何特定的事情才能让它工作吗?
已经找到了如何让它工作,看来我们需要在我们的 get 方法中 return int,我们从查询参数字符串而不是字符串中获取,我使用 asp net core 2.2 来制作我的回调 url。这里看看我的示例代码也保存在数据库中
[HttpGet]
public int Get()
{
int validationToken = Convert.ToInt32(HttpContext.Request.Query["validationToken"]);
return validationToken;
}
[HttpPost]
public void Post([FromBody]JObject rawBody)
{
using (TheoDBContext db = new TheoDBContext())
{
var jsonData = rawBody["data"];
string name = rawBody["fromUserName"].ToString();
string title = jsonData["title"].ToString();
Kaizala newKaizala = new Kaizala();
newKaizala.Name = name;
newKaizala.Question = title;
newKaizala.Answer = "yes";
db.Kaizala.Add(newKaizala);
db.SaveChanges();
}
}
您 returning int
并不是它起作用的事实。
第一次尝试失败,因为调用时出错
Request.Headers.GetValues("validationToken").FirstOrDefault().ToString();
很可能是空引用异常,因为您试图访问 header 中的令牌,而链接文档指出
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);
}
当然你可以重构为预期的查询字符串参数添加验证码。
我提出上述建议是因为不能保证令牌根据文档是有效的 int
。即使是这样,如果他们真的不再使用整数作为标记,这种方法也会更加灵活。
要求简单说明
Your service is supposed to return the validation token (received in request) in the response body as a plain-text
有了这个,只有 return 准确发送了。不要尝试对其进行任何更改。