ASP.Net PreSendRequestHeaders无法访问会话

时间:2012-03-23 22:59:02

标签: asp.net redirect

目标是在用户代码调用Response.Redirect时拦截并更改浏览器重定向到的URL。要更改此URL,我需要访问Session(存储在Session中的信息告诉我应该在此URL中添加什么。)大多数情况下,我只是在一个环境下向重定向位置附加查询参数。

PreSendRequestHeaders让我改变Response.RedirectLocation。没关系。但是,我无法从此处访问会话状态。它显然是在此事件被解雇之前发布的。

所以,我需要一种方法将这些信息传递给PreSendRequestHeaders;或者我需要另一种方法来实现这一目标。最终我的目标是在查询字符串中添加一个参数,无论浏览器被重定向到何处。

1 个答案:

答案 0 :(得分:2)

如果您可以修改写入Session的代码,那么您可以使用Context.Items

例如,在Response.RedirectPermanent方法存在之前,我使用了以下内容:

//in some library
public static void PermanentRedirect(this HttpContext context, string url)
{
    context.Items["IsPermanentRedirect"] = true;
    context.Response.Redirect(url);
}

//in global.asax
void Application_PreSendRequestHeaders(object sender, EventArgs e)
{
    if (Response.IsRequestBeingRedirected && (bool) (Context.Items["IsPermanentRedirect"] ?? false))
    {
        Response.Status = "301 Moved Permanently";
    }
}
相关问题