asp.net - Response.Redirect 使用 POST 而不是 Get?

标签 asp.net https response.redirect

我们需要提交表单并保存一些数据,然后将用户重定向到异地页面,但在重定向时,我们需要使用 POST 而不是 GET 来“提交”表单。

我希望有一种简单的方法可以实现这一点,但我开始认为没有。我想我现在必须创建一个简单的其他页面,其中只有我想要的表单,重定向到它,填充表单变量,然后对仅调用 document.forms[0].submit( );

谁能告诉我是否有其他选择?我们可能需要在项目后期对此进行调整,并且可能会变得有点复杂,因此如果有一个简单的方法,我们可以完成所有非其他页面依赖的工作,那就太棒了。

无论如何,感谢您的所有回复。

最佳答案

执行此操作需要了解 HTTP 重定向的工作原理。当您使用 Response.Redirect() 时,您将使用 HTTP Status Code 302 发送响应(到发出请求的浏览器)。 ,它告诉浏览器下一步要去哪里。根据定义,浏览器将通过 GET 请求进行此操作,即使原始请求是 POST

另一个选择是使用 HTTP Status Code 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");
}

不幸的是,这并不总是有效。 Different browsers implement this differently ,因为它不是常见的状态代码。

Alas, unlike the Opera and FireFox developers, the IE developers have never read the spec, and even the latest, most secure IE7 will redirect the POST request from domain A to domain B without any warnings or confirmation dialogs! Safari also acts in an interesting manner, while it does not raise a confirmation dialog and performs the redirect, it throws away the POST data, effectively changing 307 redirect into the more common 302.

所以,据我所知,实现这样的事情的唯一方法是使用 Javascript。我立即想到了两个选择:

  1. 创建表单并将其 action 属性指向第三方服务器。然后,向提交按钮添加一个单击事件,该按钮首先使用数据向您的服务器执行 AJAX 请求,然后允许将表单提交到第三方服务器。
  2. 创建要发布到您的服务器的表单。提交表单后,向用户显示一个页面,其中包含一个表单,其中包含您要传递的所有数据,所有数据都在隐藏输入中。只需显示“正在重定向...”之类的消息。然后,向将表单提交到第三方服务器的页面添加 JavaScript 事件。

在这两者中,我会选择第二个,原因有两个。首先,它比第一个更可靠,因为它不需要 JavaScript 即可工作;对于那些没有启用它的人,您可以随时使隐藏表单的提交按钮可见,并指示他们在需要超过 5 秒的时间时按下该按钮。其次,您可以决定将哪些数据传输到第三方服务器;如果您只使用处理表单,您将传递所有发布数据,这并不总是您想要的。 307 解决方案也是如此,假设它适用于您的所有用户。

关于asp.net - Response.Redirect 使用 POST 而不是 Get?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46582/

相关文章:

asp.net - 如何在 ASP.NET MVC 2.0 的区域内共享 View ?

c# - Ajax ModalPopupExtender 未触发

c# - 在 C# 类中使用来自同一个 ASP.NET 网站项目的 VB 类

javascript - AngularJS 模板无法通过 HTTPS 加载

asp.net - 如何在服务器发布操作结果后打开新选项卡

html - 网络路径引用 URI/方案相对 URL

c# - 了解 ASP .NET (WebForms) 中的错误处理

ssl - 如何连接到安全网站 (https :)?

asp.net - Http 状态码 413