0

我正在尝试与stripe.com集成,而 webhook 给了我一个问题。

我创建了一个控制器和一个动作来接受和解析来自条纹的 webhook:

public class WebhooksController : AbstractController
{
    public JsonResult Stripe(int id)
    {
        // some parsing code
    }
}

这是通过路由

routes.MapRoute("webhooks", "Financial/Webhooks/{action}/{id}", new { "Webhooks", "Index", id = "" }, new string[] { "MyApp.Controllers.Financial" });

我可以从浏览器或使用

curl -i -H "Host: mydomain.com" -H "Content-Type: application/json" -X POST http://{resolvedIP}/Financial/Webhooks/Stripe/4

但是,当我尝试使用“测试 webhook”功能从条纹仪表板触发 webhook 时,我得到 500:

参数字典包含“Drg.M3.Client.Controllers.Financial.WebhooksController”中方法“System.Web.Mvc.JsonResult Stripe(Int32)”的不可空类型“System.Int32”的参数“id”的空条目'。可选参数必须是引用类型、可空类型或声明为可选参数。

据 Stripe 聊天室的一名工作人员称,发送 webhook 时会带有如下内容:

curl -i -H "Host: mydomain.com" -H "Content-Type: application/json" -X POST http://{resolvedIP}/Financial/Webhooks/Stripe/4 -d '{big ol' json object}'

当一个没有数据的请求通过时,为什么一个有数据的请求会在路由时失败?

4

1 回答 1

1

解决了。

事实证明,当 MVC 看到内容类型时,application/json它会尝试将数据自动绑定到您的操作参数。

由于 json 对象 Stripe 发送包括

{
  "id" : "evt_0000000000",
  ...
}

id参数被设置为evt_0000000000而不是4

于 2012-09-01T14:49:58.327 回答