目前,我的部分应用程序会向用户发送电子邮件,提醒他们注意事件或任务。单击电子邮件客户端中的 MarkComplete 链接时,会向我的 ActionHandler.ashx (HTTPHandler)发出HTTP Get请求,其中QueryString参数是输入,允许更新事件/任务。然后将新的电子邮件发送回客户端信令完成。这很有效。
此HTTP GET对处理程序的不必要的副作用是启动浏览器(即此时,浏览器的打开是不必要的并且令人讨厌)。
前提:当我研究ASP.Net Web Api时,我想我可能能够将HTTPHandler中的少量代码重构为Web API控制器中的PUT方法。我的理解是,在执行上述所需的处理之后,该控制器可以使用void返回(HTTP状态代码204)进行响应。
问题:Web API控制器中新编写的PUT方法中的上述方法是否会返回204,这是否会阻止浏览器完全启动?我希望最终用户点击他第一封电子邮件中的链接,只获得新构建的电子邮件信号“完成”(这里根本没有浏览器)。
EDIT澄清2016年5月22日:
答案 0 :(得分:4)
简短回答:否。
如果您需要用户交互,则无法在不打开浏览器的情况下从电子邮件客户端执行HTTP请求。
大多数电子邮件客户端(包括网络邮件)do not allows you to execute JavaScript代码,因此您无权在后台执行某些操作。
这意味着您有两个选择:
GET
请求(这是您已经完成的操作)。当然,这会导致浏览器打开该页面。POST
的端点。这也将导致Web浏览器打开(and may also show a warning message in some scenarios),但可以让您更好地处理要发送的数据类型。 但是似乎这种方法与特定的客户端行为紧密相关(例如Thunderbird将每个表单提交为GET
请求),所以我不相信它是可行的。除了这两个选项,我相信你没有可能。这背后的原因纯粹与安全性有关:如果您能够在电子邮件消息中执行JavaScript代码,那将是非常不安全的。
请注意,这也会导致您的浏览器打开,但它几乎会立即关闭使用204响应的选项卡(具体行为取决于电子邮件客户端和Web浏览器组合)。 我认为即使您不更改代码库并继续使用
204
也可轻松完成此操作,但如果您愿意,当然可以通过returning void从ASP.NET Web API轻松完成。 ActionHandler.ashx
。
ActionMethod
方法:在HTML表单only GET
and POST
are allowed methods中,任何类型的PUT
代码都会始终生成<a href="... ">...</a>
个请求。这意味着您将无法在电子邮件中执行GET
方法(无论在何种环境中阅读电子邮件)。
答案 1 :(得分:1)
在电子邮件中执行操作需要打开Web浏览器。否则这将是客户方面的一个重大安全问题。如果这是一个选项,这将打开通往垃圾邮件发送者的大门,并且通过电子邮件点击任意位置并自动下载应用程序(BIG SECURITY CONCERN)。
还有其他方法可以处理这种类型的应用程序,我们使用文本消息传递以及可以回复应用程序请求的PDF表单,只要客户端是您的基础结构的一部分,SharePoint就会执行此操作。 Google现在正在使用标记进行一种RSVP并突出显示电子邮件,但仅适用于将查看标记语言和谷歌应用程序的客户端。大多数电子邮件客户端都会忽略电子邮件中的标记和脚本。我真的不知道今天没有手机的人,即使我75岁的祖母也有手机。我建议使用twilio和SignalR。另一种方法是设置您的应用程序将监控的几个电子邮件帐户,比如accept@yourdomain.com和deniy@yourdomain.com。现在,当客户端接受它时,它将发送对该电子邮件的响应,并且您的应用程序可以查看标题中的电子邮件地址以标记该帐户,这也为您提供了回顾客户端是否存在问题的记录。
至于浏览器开放我不相信这是一件坏事,这会将它们发送回您的应用程序并迫使他们查看您发布的新信息,事件或任务(营销)。
答案 2 :(得分:0)
首先,为了发送任何HTTP请求而不管你使用的动词(GET,POST,PUT,DELETE,HEAD等),你需要一个外部程序(浏览器,shell等)来做到这一点,因为电子邮件客户端不会这样做。
如果您想避免使用Web浏览器,您可以考虑其他方法,例如配置您发送给用户的第一封电子邮件,其中包含以下特定主题:“约会确认”并告诉用户回复此问题按原样发送电子邮件,这将向您发送一封电子邮件,其中包含您发送给用户的原始主题,接下来您可以配置您的应用程序以期待此类传入电子邮件,并通过发送第二封电子邮件对此事件做出反应。您将获得与第一封电子邮件中包含的用户相同的信息,这可用于配置第二封电子邮件。