这适用于那些尝试在github中使用Mandrill .NET的人。
我需要能够处理入站邮件,并且根据Mandrill文档,我必须创建一个带有相应公共URL的webhook。在实现action方法方面,我遵循了WebHookEvent.cs文档中描述的方法签名。此时所有内容都按预期工作:如果我将邮件发送到我在webhook事件中注册的mandrill电子邮件,则会从Mandrill调用操作方法。为了讨论,我们假设方法名称是ProcessInboundMail。
继续前进,我的应用程序需要支持多租户。因此,不必在方法ProcessInboundMail中进行直接处理,而是必须以某种方式重定向到包含相应子域的URL(例如company1.myapp.com/mycontroller/ProcessInboundMail)。从那时起,我开始遇到一个特殊的问题。
如果我发送邮件到mandrill电子邮件,则不再正确执行操作方法。为了验证webhook是否正常工作,我进入了mandrill管理页面>入境>域(InboundDomains.png),单击路由按钮,然后单击按钮“发送测试”(MailboxRoutes.png),但我得到的只是此错误消息: Webhook失败并显示错误:POST http://myapp.com/mycontroller/ProcessInboundMail失败,411:Length Required 长度要求 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);
}
我的问题是,为什么我没有使用Redirect,单击“发送测试”成功,但现在我正在使用Redirect,我在点击“发送测试”时收到此HTTP错误411?我在这里做错了什么?