我们需要进行表单提交并保存一些数据,然后将用户重定向到站点外的页面,但是在重定向过程中,我们需要使用POST而不是GET“提交”表单。

我希望有一个简单的方法来完成这一点,但我开始觉得没有。我想我现在必须创建一个简单的另一个页面,只有我想要的表单,重定向到它,填充表单变量,然后做一个主体。Onload调用脚本,只调用document.forms[0].submit();

谁能告诉我还有别的选择吗?我们可能需要在项目后期进行调整,它可能会变得有点复杂,所以如果有一个简单的方法,我们可以做所有不依赖于其他页面的事情,那就太棒了。

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


当前回答

@Matt,

您仍然可以使用HttpWebRequest,然后将您接收到的响应定向到实际的输出流响应,这将为用户提供响应。唯一的问题是任何相对url都会被破坏。

不过,这可能奏效。

其他回答

ASP中的一些新东西。Net 3.5是ASP按钮的“PostBackUrl”属性。您可以将其设置为您想要直接发布到的页面的地址,当单击该按钮时,它不会像正常情况下那样发布回同一页面,而是会发布到您所指示的页面。方便。确保UseSubmitBehavior也被设置为TRUE。

在PHP中,您可以使用cURL发送POST数据。是否有与。net类似的东西?

是的,HttpWebRequest,请看我下面的帖子。

GET(和HEAD)方法绝不能用来做任何有副作用的事情。副作用可能是更新web应用程序的状态,或者可能是收取您的信用卡费用。如果某个操作有副作用,则应该使用另一种方法(POST)。

因此,用户(或他们的浏览器)不应该对GET所做的事情负责。如果由于GET而产生了一些有害或昂贵的副作用,那将是web应用程序的错,而不是用户的错。根据规范,用户代理不能自动跟踪重定向,除非它是对GET或HEAD请求的响应。

当然,许多GET请求确实有一些副作用,即使它只是附加到日志文件中。重要的是,对这些影响负责的应该是应用程序,而不是用户。

HTTP规范的相关章节是9.1.1、9.1.2和10.3。

HttpWebRequest用于此。

在回发时,创建一个HttpWebRequest到你的第三方并发布表单数据,然后一旦完成,你就可以响应了。转向你想去的地方。

你得到了额外的好处,你不必为所有的服务器控件命名来创建第三方表单,你可以在构建POST字符串时进行这种转换。

string url = "3rd Party Url";

StringBuilder postData = new StringBuilder();

postData.Append("first_name=" + HttpUtility.UrlEncode(txtFirstName.Text) + "&");
postData.Append("last_name=" + HttpUtility.UrlEncode(txtLastName.Text));

//ETC for all Form Elements

// Now to Send Data.
StreamWriter writer = null;

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";                        
request.ContentLength = postData.ToString().Length;
try
{
    writer = new StreamWriter(request.GetRequestStream());
    writer.Write(postData.ToString());
}
finally
{
    if (writer != null)
        writer.Close();
}

Response.Redirect("NewPage");

但是,如果您需要用户从这个表单中看到响应页面,那么惟一的选择就是使用Server。转移,可能有用,也可能没用。

我会这么做:

将数据放入标准表单(不带runat="server"属性),并将表单的动作设置为发布到目标场外页面。 在提交之前,我将使用XmlHttpRequest将数据提交到服务器并分析响应。如果响应意味着你应该继续与场外张贴然后我(JavaScript)将继续与张贴,否则我会重定向到我的网站上的一个页面