2012-03-23 41 views
2

目標是截取用戶代碼調用Response.Redirect並更改瀏覽器被重定向到的URL。爲了改變這個URL,我需要訪問Session(存儲在Session中的信息告訴我我應該在這個URL中放置什麼)。大多數情況下,我只是在某種情況下將查詢參數附加到重定向位置。ASP.Net PreSendRequestHeaders無法訪問會話

PreSendRequestHeaders讓我改變Response.RedirectLocation。沒關係。但是,我無法從這裏訪問會話狀態。它顯然是在這個事件被解僱之前被釋放的。

所以,我需要一種方法來獲取此信息到PreSendRequestHeaders;或者我需要另一種方法來實現這一點。最終,我的目標是隻在瀏覽器被重定向的任何位置追加一個參數。

+0

爲什麼你不按照簡單的方式 - 使從一開始就與你喜歡的參數重定向? – Aristos 2012-03-24 00:57:39

+0

因爲我並不總是在控制什麼代碼啓動重定向? – wasabi 2012-03-24 01:56:05

回答

2

如果您可以修改寫入會話的代碼,那麼您可以使用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"; 
    } 
}