我有一个页面,根据某些条件,我正在执行 Response.Redirect 或 Server.Transfer。现在我想为这两种情况添加一个标题。所以我正在做以下事情
Response.AddHeader("Vary", "User-Agent");
if (condition)
{
Server.Transfer(redirectUrl);
}
else
{
Response.Redirect(redirectUrl);
}
现在,当代码通过 Server.Transfer 代码路径时,Vary header 设置为 * 而当它通过 Response.Redirect 时, header 正确设置为 User-Agent。
为什么会发生这种情况,我如何将两种情况的响应 header 设置为相同?
最佳答案
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()
{
}
}
干杯!
关于c# - 如何在 Asp.Net 中的 Server.Transfer 之前设置响应头?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11417355/