如何在执行Response.Redirect时修改Request.Headers [“Referer”]?

时间:2010-08-11 06:39:28

标签: c# asp.net http-headers

在我正在处理的Web应用程序(C#,ASP.NET)中,Request.Headers [“Referer”]中的值可以确定自定义样式之类的内容。我创建了一个带有下拉菜单的自定义页面来测试此功能。因此,当所选索引发生变化时,应在Request.Headers [“Referer”]中设置所选值,然后重定向(Response.Redirect),接收页面将在Request.Headers [“Referer”]中获取值。 ]并相应调整样式。但是我无法为Request.Headers [“Referer”]设置值。它有可能吗?

  

网站1 设置值   Request.Headers [“Referer”],例如    www.xyz.com 并在做Response.Redirect之前   到 www.website2.com

     

网站2 获取价值   Request.Headers [“Referer”],在此   案例 www.xyz.com 并做它需要的事情   做,即造型等。

4 个答案:

答案 0 :(得分:3)

试试此代码

在网站1中将此代码放入按钮单击

        HttpRequest equest =  this.Request;
        NameValueCollection headers = Request.Headers;

        //get a type
        Type t = headers.GetType();         

        t.InvokeMember("MakeReadWrite", BindingFlags.InvokeMethod | 
              BindingFlags.NonPublic | BindingFlags.Instance, null, headers, null);
        t.InvokeMember("InvalidateCachedArrays", BindingFlags.InvokeMethod |
              BindingFlags.NonPublic | BindingFlags.Instance, null, headers, null);

        System.Collections.ArrayList item = new System.Collections.ArrayList();
        item.Add("YOUR_STYLE_NAME");
        t.InvokeMember("BaseAdd", BindingFlags.InvokeMethod | BindingFlags.NonPublic |
              BindingFlags.Instance, null, headers, new object[] { "CUSTOM_STYLE", item });

        t.InvokeMember("MakeReadOnly", BindingFlags.InvokeMethod |
              BindingFlags.NonPublic | BindingFlags.Instance, null, headers, null);

        Server.Transfer("Default.aspx");

并在网站2中将此代码设置为阅读样式

        var bnymuser = Request.Headers["CUSTOM_STYLE"];

答案 1 :(得分:2)

你不能这样做。 Request.Headers [“Referer”]值是浏览器在每个请求上发送的值。它取决于浏览器选择为此值提供的值,并且网页无法发送“为您的下一个请求,为参考者使用此值”的响应。当你执行Request.Redirect时,你正在向浏览器发送一个响应,告诉它再发一个请求。

所以无论你想要实现什么,这种尝试过的方法都不会成为你的方法。

答案 2 :(得分:1)

使用查询字符串轻松执行相同的任务。

答案 3 :(得分:1)

  

你不能按照你想要的方式这样做。

为什么?

在这种情况下,Request.Headers是从Web客户端收到的请求标头 - 在大多数情况下是浏览器。如果您需要修改或添加Http请求的标头,您首先需要充当HttpClient,就像浏览器一样。一旦请求到达Http服务器,在您的情况下您的网站1,您不能修改其值,因为它不允许这样做。由于这个原因,您无法修改请求标头,然后使用修改的标头重定向到网站2。你将不得不放弃任何一件事。

正如其他人所说,您可以使用query-string中的值重定向到网站2。