在我正在处理的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 并做它需要的事情 做,即造型等。
答案 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。