【问题标题】:How to Retain Request.Form data如何保留 Request.Form 数据
【发布时间】:2012-10-28 15:47:43
【问题描述】:

这是关于在 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 数据?

【问题讨论】:

    标签: asp.net redirect request forms request.form http-post


    【解决方案1】:

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

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

    在这种情况下,应该使用另一个 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。这对您来说可能是一个更简单的选择。

    【讨论】:

      【解决方案2】:
      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。

      【讨论】:

        猜你喜欢
        • 2022-10-05
        • 2019-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-05
        相关资源
        最近更新 更多