【问题标题】:Submit to HttpHandler results in RequestType GET instead of POST提交到 HttpHandler 导致 RequestType GET 而不是 POST
【发布时间】:2014-12-12 10:57:16
【问题描述】:

我的 ActionHandler.ashx 文件应该在进入 ProcessRequest 时发布,context.Request.RequestType 始终是“GET”。

背景: 此 HttpHandler 当前工作正常(即单击电子邮件中的链接会导致输入我的 ActionHandler.ashx 并正确处理查询字符串)。例如:

https://mdwdata/CorporateBrain/ActionHandler.ashx?Action=MarkComplete&ID=1024~nzmewoojgnn&CUID=13

是在下图中显示为 Mark-Complete 的链接的 URL:

但现在我正在尝试通过在 previous SO thread 中遵循此 建议 来改进它:

“在电子邮件正文中,不要发送链接,而是包含一个 HTML 表单,其中包含一个按钮,该按钮执行回发到您的服务器。”

问题摘要:当我单击提交按钮时,我的处理程序输入动词 GET 而不是 POST(因此,我无法访问 Request.Form 集合中的隐藏表单数据。 p>

这是邮件正文的 sn-p(图片)

如果我可以让 Submit 将隐藏的表单变量发布到我的处理程序,那么我当然会删除链接。在调试器中,我验证了表单数据,看起来不错:

我将此行添加到我的 web.config 文件中:

<add path="ActionHandler.ashx" verb="GET,POST" type="System.Web.UI.SimpleHandlerFactory" validate="true" />

另外,我的电子邮件客户端是 Thunderbird。

什么会导致请求是 GET 而不是 POST?

【问题讨论】:

  • Forms in HTML email?不确定 Thunderbird 的具体情况,但回溯(大约 2007 年)的警告适用。可以在客户端查看源码吗?
  • @EdSF - 是的,我对此也有点不确定。只需遵循原始帖子中上面引用的上一个 SO 线程中的建议即可。这种方法需要适用于所有电子邮件客户端。我看不到在 Thunderbird 客户端中“查看源代码”的方法。我会仔细研究您提供的链接(似乎与我上面提到的建议相矛盾)。我在想“概念”没问题,也许我只是错过了一个特殊的 web.config 条目等。

标签: html asp.net http-post httphandler ashx


【解决方案1】:

这个问题的简短回答是 Thunderbird 不会 POST 到 HTML 表单标签的 Action 属性中的 URL。即使是最新版本的 Thunderbird(版本 31.2.0)“忽略”POST 并通过 GET 请求 URL。

HTML 表单的构建已正确完成,并且我测试过的其他电子邮件客户端工作正常:

  • Microsoft Office 365 Outlook Web App
  • 谷歌邮箱

所以,我想我做得“正确”,但一些电子邮件客户端显然不支持这一点(甚至我最喜欢的是 Thunderbird)。

【讨论】:

  • 有趣。面对这种情况,我可能会在电子邮件中包含一些关于“如果您的电子邮件客户端不支持表单,请单击此处转到该站点”的文本。或类似的东西。
猜你喜欢
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
相关资源
最近更新 更多