Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 条带webhooks失败,参数为空';id';_C#_Asp.net Mvc_Stripe Payments_Webhooks - Fatal编程技术网

C# 条带webhooks失败,参数为空';id';

C# 条带webhooks失败,参数为空';id';,c#,asp.net-mvc,stripe-payments,webhooks,C#,Asp.net Mvc,Stripe Payments,Webhooks,我正在尝试与集成,而Webhook给了我一个问题 我已经创建了一个控制器和一个操作来接受和解析stripe中的webhooks: public class WebhooksController : AbstractController { public JsonResult Stripe(int id) { // some parsing code } } 这是通过 routes.MapRoute("webhooks", "Financial/Webho

我正在尝试与集成,而Webhook给了我一个问题

我已经创建了一个控制器和一个操作来接受和解析stripe中的webhooks:

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
但是,当我尝试使用“test webhook”功能从stripes dashboard启动webhook时,我得到了500:

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

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}'
当一个没有数据的请求通过时,为什么一个有数据的请求在路由时会失败?

已解决

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

因为json对象条带发送包含

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

id
参数被设置为
evt\u0000000000
而不是
4

接收端的id类型是什么?是否有可能是某种Guid,而您正试图传入一个空字符串?类型为
int
。在本例中,它是
4
(http://{ip}/Financial/Webhooks/Stripe/4)。您是否尝试过在Stripe方法中设置断点并查看是否命中?此外,默认路线中的id=”“与我的身份不符,因为您的id是INT,所以操作不会被击中。“”的默认id应与id=(int?)null相同。事实上,MVC只在调用action时才关心路由时url段的类型。ASP.NET MVC的post数据到控制器操作方法参数名称的自动映射与应用程序/json内容类型没有直接关系,也不受其限制;ASP.NET MVC url映射引擎在大量场景中执行此映射/参数绑定。