重定向,将数据发布到ASP.NET中的另一个URL

重定向,将数据发布到ASP.NET中的另一个URL,asp.net,http-post,response.redirect,http-get,Asp.net,Http Post,Response.redirect,Http Get,我想将响应重定向到另一个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.exampl

我想将响应重定向到另一个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中执行此操作?

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


因此,实现这一点的一种方法是重定向到某个临时页面,该页面将包含带有
method=“POST”
的HTML
,并包含要作为隐藏字段发送的值。然后您可以使用javascript自动提交此表单。

您也可以使用此技巧发送大量数据

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();
Response.Clear();
StringBuilder sb=新的StringBuilder();
某人加上(“”);
sb.AppendFormat(@“);
sb.AppendFormat(“,postbackUrl);
sb.AppendFormat(“,id”);
//其他的女人都到这里来了
某人加上(“”);
某人加上(“”);
某人加上(“”);
写(某人写的东西);
Response.End();

虽然这是一个非常古老的线程,但我想我会分享我是如何做到这一点的

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

  • 在a.aspx中收集用户输入。用户单击“提交”按钮,这将导致回发
  • 在a.aspx的按钮点击事件中,处理卷数据(例如保存上传的二进制文件)。确定卷数据的链接并将其附加到request.form name值字符串的末尾
  • 加密最终名称值字符串并将其设置为cookie
  • 重定向到b.aspx
  • 在b.aspx中,检索该cookie,解密并获得所有名称-值对。现在像往常一样处理它们
  • 优点: (a) b.aspx显示在浏览器地址栏中。它进入浏览器的历史记录。Server.transfer执行这些操作。
    (b) 它赋予了邮政的效力。用户无法在querystring中看到名称-值对。

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

    我的数据很大,超过了4096字节,这是当前浏览器可以处理的最大数据量。如何在没有java脚本的情况下发布此数据?@Xaqron,有两种可能:创建一个HTML表单,将数据放入表单中的隐藏字段,然后提交表单,或者使用WebRequest在服务器端执行请求。关于您的最后一条评论:客户端浏览器应将数据传输到另一台服务器。建议:如何清除标题,添加帖子标题,然后重定向?@Xaqron,正如我在回答redirect=>GET中所说的。你还可以试试别的。将此数据持久化到某个公共数据存储中,并通过仅传递id重定向到远程url,以便此远程url能够使用此id从公共数据存储中提取数据。+1感谢您的建议
    Govind
    您提到的解决方案适合我的场景。可能重复有用的技巧。通过POST方法发送值没有任何简单的方法吗?用户在任何阶段都能够查看源(或类似)并查看传递的POST数据吗?如果我们还需要添加cookie以使POST在外部站点上工作,该怎么办?这正是我所需要的。。我曾尝试过server.transfer(仅在网站内有效)和response.redirect(这是一个禁止的)…WebRequest..甚至没有关闭..动态构建和从response.clear到response.end的转发正是我解决问题所需要的。(我需要将查询字符串和表单数据转发到另一个页面进行调试)不在
    响应上。重定向(“destination”,false)
    -它使用HTTP 301传输;不呈现任何页面。