17

我想将响应重定向到另一个 URL,而它的 HTTP 标头中包含一些 POST 数据。

// Inside an ASP.NET page code behind:
Response.Redirect("http://www.example.com/?data=sent%20via%20GET");
// This will sent data to http://www.example.com via GET.
// I want to POST this data to http://www.example.com instead.

如何在 ASP.NET 中执行此操作?

4

4 回答 4

56

你也可以用这个技巧发送大量数据..

Response.Clear();

StringBuilder sb = new StringBuilder();
sb.Append("<html>");
sb.AppendFormat(@"<body onload='document.forms[""form""].submit()'>");
sb.AppendFormat("<form name='form' action='{0}' method='post'>",postbackUrl);
sb.AppendFormat("<input type='hidden' name='id' value='{0}'>", id);
// Other params go here
sb.Append("</form>");
sb.Append("</body>");
sb.Append("</html>");

Response.Write(sb.ToString());

Response.End();
于 2011-05-19T17:06:09.907 回答
12

您不能使用重定向发布。根据定义,重定向意味着服务器向具有新位置的客户端发送 302 重定向 HTTP 状态代码,以便客户端向该新位置发出 GET 请求。这就是 HTTP 协议的工作原理,您对此无能为力。

因此,实现此目的的一种方法是重定向到某个临时页面,该页面将包含一个 HTML <form>method="POST"其中包含您想要作为隐藏字段发送的值。然后您可以使用 javascript 自动提交此表单。

于 2011-05-19T16:59:06.133 回答
0

虽然它是相当古老的线程,但我想我会分享我是如何做到的。

假设发送页面是 a.aspx,目标页面是 b.aspx。

  1. 在 a.aspx 中收集用户输入。用户单击提交按钮导致回发。
  2. 在 a.aspx 的 Button_click 事件中,处理卷数据(例如保存上传的二进制文件)。确定卷数据的链接并将其附加到 request.form 名称-值字符串的末尾。
  3. 加密最终的名称-值字符串并将其设置为 cookie。
  4. 重定向到 b.aspx
  5. 在 b.aspx 中,检索该 cookie,解密并获得所有名称-值对。现在像往常一样处理它们。

优点: (a) b.aspx 显示在浏览器地址栏中。它进入浏览器的历史记录。Server.transfer 做这些。(b) 赋予职位的效力。用户无法在查询字符串中看到名称-值对。

于 2015-07-21T14:20:15.323 回答
0

您可以使用 viewstate 来“传输”数据并在新页面甚至同一页面上读取它。

于 2016-07-14T02:33:26.267 回答