我有一个页面,根据某些条件我要么做一个Response.Redirect或Server.Transfer。现在我想为两个案例添加一个标题。所以我正在做以下
Response.AddHeader("Vary", "User-Agent");
if (condition)
{
Server.Transfer(redirectUrl);
}
else
{
Response.Redirect(redirectUrl);
}
现在,当代码通过Server.Transfer代码路径时,Vary标头设置为*,而当它通过Response.Redirect时,标头正确设置为User-Agent。
为什么会发生这种情况?如何将两个案例的响应标头设置为相同?
答案 0 :(得分:6)
当您调用Server.Transfer
时,当前页面的Response对象将被目标页面的Response对象替换(这将是实际发送给用户的Response )。
因此,如果要设置此特定标头属性,则必须在目标页面上执行此操作。
如果它是有条件的,也许您可以使用HttpContext.Items
属性,该属性在第一页上设置并在第二页上读取。
此致
答案 1 :(得分:4)
Andre是正确的,Response对象被替换为Server.Transfer
的一部分。如果您想将您转移到父母不可知的页面转移到HttpContext.Items
,则可以将信息打包到IHttpModule
,然后使用Items.Add(VaryHttpModule.Key, "User-Agent");
if (condition)
{
Server.Transfer(redirectUrl);
}
else
{
Response.Redirect(redirectUrl);
}
public class VaryHttpModule : IHttpModule
{
public const string Key = "Vary";
public void Init(HttpApplication context)
{
context.PostRequestHandlerExecute +=
(sender, args) =>
{
HttpContext httpContext = ((HttpApplication)sender).Context;
IDictionary items = httpContext.Items;
if (!items.Contains(Key))
{
return;
}
object vary = items[Key];
if (vary == null)
{
return;
}
httpContext.Response.Headers.Add("Vary", vary.ToString());
};
}
public void Dispose()
{
}
}
提取信息并相应地配置标头。这样的事情可能会起到作用......
{{1}}
干杯!
答案 2 :(得分:0)
在results.TrySetPropertyValue("ResultIds", alerts.ResultIds);
中添加标题,并且不要更改Source.aspx
中的标题。
如果要将结果页面显示为html,则应将标题Destination.aspx page
添加为content-type