如何保留Request.Form数据

时间:2011-09-19 17:23:08

标签: asp.net redirect request html-form-post request.form

这是关于在ASP.Net中正确转发POST变量

要强制所有连接使用https协议而不是http,我在Global.asax中插入以下代码

If Not Request.IsSecureConnection Then
            Response.Redirect("https://" & Request.ServerVariables("HTTP_HOST") + Request.RawUrl)
End If

在我遇到使用POST提交的表单之前,这工作正常,并且使用上述方法打破了表单检索过程。

例如:网页为http://abc.com/page1.aspx(此页面仅接受POST表单数据)。现在强制应用程序重定向到https,页面正确地被重定向到https://abc.com/page1.aspx,但是,在此过程中所有表单数据都将丢失。

有没有办法存储和转发Request.Form数据?

2 个答案:

答案 0 :(得分:1)

这几乎是HTTP 307状态代码的用途。您可能需要考虑使用HTTP 307状态而不是302来重定向它们。

HTTP 307表示重定向,并重新提交POSTed数据:

  

在这种情况下,请求应该使用另一个URI重复,但未来的请求仍然可以使用原始URI。[2]与303相反,在重新发出原始请求时不应更改请求方法。 例如,必须使用其他POST请求重复POST请求   Reference

在ASP.NET中没有超级简单的方法,但它也不难。例如:

Response.StatusCode = 307;
Response.Status = "307 Temporary Redirect";
Response.AddHeader("Location","http://www.new-url.com");

或者,您也可以使用Server.Transfer(string)。 Phil Haack解释了here。对您来说,这可能是一个更简单的选择。

答案 1 :(得分:0)

Sub Session_OnStart
    If UCase(Request.ServerVariables("HTTPS")) = "OFF" Then
        sRedirect = "https://" & Request.ServerVariables("SERVER_NAME") &  Request.ServerVariables("PATH_INFO") & "?" & Request.Querystring
        Response.Redirect sRedirect
    End if
END Sub

将以上内容添加到您的global.asa或global.asax。