Mandrill .NET入站邮件webhook:HTTP错误411

时间:2013-11-13 10:53:12

标签: webhooks mandrill inbound

这适用于那些尝试在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?我在这里做错了什么?

0 个答案:

没有答案