带标题的Response.Redirect

时间:2010-11-01 15:43:24

标签: asp.net response.redirect

我正在尝试设置标题并重定向到这样的不同页面 -

Response.Headers.Add("id", "testtest");
Response.Redirect("http://www.somesite.com/somepage.aspx");

在somepage.aspx的page_load中,我正在检查标题请求 -

if (!string.IsNullOrEmpty(Request["id"]))
{
   // do something with "id"
}

Request["id"]始终为空。如何在新页面中获取标题的值?我不想使用查询字符串。

谢谢!

更新

这里有一些细节 - 我在两台不同的机器上运行了两个ASP.NET v4 Web应用程序(站点1和站点2)。站点1只有一个aspx表单,它只有一个按钮。单击按钮,我点击数据库并获得我需要的值,并将其传递给站点2.在站点2的Global.asax中,我将读取从站点1收到的标题信息并使用该值。 / p>

更新#2:

我能够让它发挥作用 -

 Response.Write(
                    string.Format(
                        @"<form action='{0}' id='test' method='POST'><input type='hidden' name='key' value={1} /></form>
                  <script type='text/javascript'>
                     document.getElementById('test').submit();
                  </script> ",
                        "http://www.somesite.com", "1234"));

在目标网站中,我可以使用 -

获取值
Request["key"]

4 个答案:

答案 0 :(得分:13)

HTTP标头仅对当前响应有效。设置重定向时,当前响应包含您的自定义标头,但当浏览器跟随重定向位置时,这些标头不再存在。此外,您在其他页面中使用Request["id"],因此您需要将值作为查询字符串发送:

Response.Redirect("http://www.somesite.com/somepage.aspx?id=test");

答案 1 :(得分:2)

Response.Headers.Add(“id”,“testtest”); 没有预期的效果,因为您从未向客户发送过响应。如果您正在使用Response.Redirect,那么您只需重定向到URL,而Request对象不会与之前的Response params一起使用。

您可以使用某种形式的AppContext / Session机制在这两个页面之间传递参数。

答案 2 :(得分:2)

无法向http请求添加标头,但可以通过浏览器或其他程序的用户操作或通过自己发送此类请求来启动标头。

因此,您可以简单地使用.Net Framework中的某个http客户端,例如HttpClientHttpWebRequest,并使用您想要的任何标头发送自定义请求,而不是调用{{1} }。

然而,只能在IIS中向http响应消息添加自定义标头。执行重定向时仍无法控制后续请求标头。

Response.Redirect

答案 3 :(得分:0)

你试过Server.Transfer("http://www.somesite.com/somepage.aspx");吗?这可能会为您提供所需的数据。如果没有,如果您不想使用Session变量,则必须将数据发布到原始页面上的表单。