如何在Asp.Net中的Server.Transfer之前设置响应标头?

sha*_*shi 4 c# asp.net response.redirect server.transfer http-headers

我有一个页面,根据某些条件我要么做Response.Redirect或Server.Transfer.现在我想为两个案例添加一个标题.所以我正在做以下事情

    Response.AddHeader("Vary", "User-Agent");

    if (condition) 
    {
        Server.Transfer(redirectUrl);
    }
    else
    {
        Response.Redirect(redirectUrl);
    }
Run Code Online (Sandbox Code Playgroud)

现在,当代码通过Server.Transfer代码路径时,Vary标头设置为*,而当它通过Response.Redirect时,标头正确设置为User-Agent.

为什么会发生这种情况?如何为两种情况设置响应标头相同?

And*_*lil 6

当您调用时Server.Transfer,当前页面的Response对象将被目标页面的Response对象(实际发送给用户的Response)替换.因此,如果要设置此特定标头属性,则必须在目标页面上执行此操作.

如果它是有条件的,也许您可​​以使用HttpContext.Items在第一页上设置的属性,在第二页上读取.

问候

  • 在这种情况下,我认为HttpContext.Items可能比Session更合适.会话将在请求之间保留,而项目将在请求完成后进行清理. (2认同)