2011-09-19 46 views
1

这是关于正确地在ASP.Net如何保留的Request.Form数据

要强制所有连接都使用HTTPS协议,而不是HTTP POST转发变数,我插入下面的代码在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数据?

回答

1

这几乎是HTTP 307状态代码的用途。你可能要考虑与HTTP 307状态,而不是302

一个HTTP 307种重定向手段重定向他们,并重新提交发布的数据:

在这种情况下,请求应与其他重复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)为好。菲尔哈克给出了这个here的解释。这对你来说可能是一个更简单的选择。

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中。