4

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

4

0 回答 0