如何使用POST重定向而不是使用GET c#

时间:2015-12-07 12:26:11

标签: c# asp.net

我正在使用像这样的GET方法的Redirect(工作正常):

Response.Redirect(string.Format("../NewPage.aspx?Name1={0}&Name2={1}","name1", "name2" );

但我想使用POST方法,因此客户端无法访问这些变量。我搜索并找到了#34; Response.Redirect with POST instead of Get?"

目前,我有以下代码:

StringBuilder postData = new StringBuilder();

postData.Append("Name1=" + HttpUtility.UrlEncode("Name1") + "&");
postData.Append("Name2=" + HttpUtility.UrlEncode("Name2"));

//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.aspx");

我的问题是,如何在NewPage.aspx页面中使用/获取传递的变量?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用HTTP状态代码307实际执行POST重定向;有时候会有有效的用例,例如在银行应用程序中。

“307临时重定向(自HTTP / 1.1起):在这种情况下,请求应该使用另一个URI重复;但是,将来的请求仍然应该使用原始URI。与历史上实现302的方式相反,重新发出原始请求时,不允许更改请求方法。例如,应使用另一个POST请求重复POST请求。“source

了解更多here

当然,在你的情况下这是否是好的做法,是另一个问题;可能还有其他与保持状态有关的变通办法,以避免篡改。

编辑:刚刚注意到这个here上已有一个主题。