githubでMandrill .NETを使ってみた人向けです。
受信メールを処理できるようにする必要があり、Mandrill のドキュメントに基づいて、対応するパブリック URL を使用して Webhook を作成する必要があります。アクション メソッドの実装に関しては、WebHookEvent.cs のドキュメントに記載されているメソッド シグネチャに従いました。その時点で、すべてが期待どおりに機能していました。webhook イベントに登録した mandrill 電子メールにメールを送信すると、アクション メソッドが Mandrill から呼び出されます。議論のために、メソッド名が ProcessInboundMail であると仮定しましょう。
今後、私のアプリはマルチテナンシーをサポートする必要があります。したがって、ProcessInboundMail メソッドで簡単に処理する代わりに、適切なサブドメイン (例: company1.myapp.com/mycontroller/ProcessInboundMail) を含む URL にリダイレクトする必要があります。それ以来、私は独特の問題に遭遇し始めました。
マンドリル メールにメールを送信すると、アクション メソッドが正しく実行されなくなります。Webhook が機能しているかどうかを確認するために、mandrill 管理ページ > Inbound > Domains (InboundDomains.png) に移動し、[Routes] ボタンをクリックしてから、[send test] (MailboxRoutes.png) ボタンをクリックしましたが、このエラーしか表示されませんでした。メッセージ: Webhook がエラーで失敗しました: http://myapp.com/mycontroller/ProcessInboundMailへの POSTが 411 で失敗しました: 長さが必要です 長さが必要です HTTP エラー 411. 要求はチャンクされているか、コンテンツの長さが必要です。
私の ProcessInboundMail は次のようになります。
[AllowAnonymous]
[ValidateInput(false)] // May be required if accepting inbound webhooks
[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post | HttpVerbs.Head)]
public ActionResult ProcessInboundMail(string id, FormCollection val)
{
var events = Mandrill.JSON.Parse<List<Mandrill.WebHookEvent>>(val.Get("mandrill_events"));
foreach (var e in events)
{
//logic here...
var redirectResult = Redirect(toSomeUrl);
redirectResult.ExecuteResult(this.ControllerContext);
}
return Json(1, JsonRequestBehavior.AllowGet);
}
私の質問は、リダイレクトを使用していないときに「テストの送信」をクリックすると成功したのに、リダイレクトを使用するようになったので、「テストの送信」をクリックするとこの HTTP エラー 411 が発生するのはなぜですか? ここで何が間違っていますか?