我们需要提交表单并保存一些数据,然后将用户重定向到异地页面,但在重定向中,我们需要使用 POST 来“提交”表单,而不是 GET。
我希望有一种简单的方法可以实现这一点,但我开始认为没有。我想我现在必须创建一个简单的其他页面,其中只有我想要的表单,重定向到它,填充表单变量,然后对仅调用 document.forms[0].submit( 的脚本进行 body.onload 调用);
谁能告诉我是否有替代方案?我们可能需要在项目后期对此进行调整,并且可能会变得有点复杂,因此如果有一个简单的方法,我们可以完成所有非其他页面依赖的工作,那就太棒了。
无论如何,感谢您的所有回复。
执行此操作需要了解 HTTP 重定向的工作原理。当你使用Response.Redirect()
,您发送一个响应(到发出请求的浏览器)HTTP 状态代码 302,它告诉浏览器下一步要去哪里。根据定义,浏览器将通过GET
请求,即使原始请求是POST
.
另一种选择是使用HTTP 状态代码 307,它指定浏览器应以与原始请求相同的方式发出重定向请求,但会提示用户安全警告。为此,您可以编写如下内容:
public void PageLoad(object sender, EventArgs e)
{
// Process the post on your side
Response.Status = "307 Temporary Redirect";
Response.AddHeader("Location", "http://example.com/page/to/post.to");
}
不幸的是,这并不总是有效。不同浏览器的实现方式不同,因为它不是常见的状态代码。
唉,与 Opera 和 FireFox 开发人员不同,IE 开发人员从未阅读过规范,即使是最新、最安全的 IE7 也会将 POST 请求从域 A 重定向到域 B,而不会出现任何警告或确认对话框! Safari 的行为方式也很有趣,虽然它不会弹出确认对话框并执行重定向,但它会丢弃 POST 数据,有效地将 307 重定向更改为更常见的 302。
所以,据我所知,实现这样的事情的唯一方法是使用 Javascript。我能立即想到两个选择:
- 创建表单并拥有其
action
属性指向第三方服务器。然后,向提交按钮添加一个单击事件,该按钮首先使用数据向您的服务器执行 AJAX 请求,然后允许将表单提交到第三方服务器。
- 创建要发布到您的服务器的表单。提交表单后,向用户显示一个页面,其中包含一个表单,其中包含您要传递的所有数据,所有数据都在隐藏输入中。只需显示“正在重定向...”之类的消息。然后,在将表单提交到第三方服务器的页面中添加一个 javascript 事件。
在这两者中,我会选择第二个,原因有两个。首先,它比第一个更可靠,因为它不需要 JavaScript 即可工作;对于那些没有启用它的人,您可以随时使隐藏表单的提交按钮可见,并指示他们在需要超过 5 秒的时间时按下该按钮。其次,您可以决定将哪些数据传输到第三方服务器;如果您只使用处理表单,您将传递所有发布数据,这并不总是您想要的。 307 解决方案也是如此,假设它适用于所有用户。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)