这适用于那些尝试在 github 中使用 Mandrill .NET 的人。
我需要能够处理入站邮件,并且基于 Mandrill 文档,我必须创建一个具有相应公共 url 的 webhook。在实现 action 方法方面,我遵循了 WebHookEvent.cs 文档中描述的方法签名。那时一切都按预期工作:如果我将邮件发送到我注册到 webhook 事件的 mandrill 电子邮件,则从 Mandrill 调用操作方法。为了便于讨论,我们假设方法名称是 ProcessInboundMail。
展望未来,我的应用需要支持多租户。因此,我必须以某种方式重定向到包含适当子域(例如 company1.myapp.com/mycontroller/ProcessInboundMail)的 url,而不是在 ProcessInboundMail 方法中进行直接处理。从那时起,我开始遇到一个奇怪的问题。
如果我将邮件发送到 mandrill 电子邮件,则不再正确执行操作方法。为了验证 webhook 是否正常工作,我去了 mandrill 管理页面 > Inbound > Domains (InboundDomains.png),单击 Routes 按钮,然后单击按钮“send test” (MailboxRoutes.png),但我得到的只是这个错误消息:Webhook 失败并出现错误:POST 到http://myapp.com/mycontroller/ProcessInboundMail失败并出现 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?我在这里做错了什么?