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)' の null 非許容型 'System.Int32' のパラメーター 'id' の null エントリが含まれています'。オプションのパラメーターは、参照型または null 許容型であるか、オプションのパラメーターとして宣言する必要があります。

ストライプ チャットルームの 1 人のスタッフ メンバーによると、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検出すると、データをアクション パラメータに自動バインドしようとすることがわかりました。

Stripeが送信するjsonオブジェクトには含まれているため

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

idパラメータがevt_0000000000ではなく に設定されていました4

于 2012-09-01T14:49:58.327 に答える