2012-03-23 11 views
2

Das Ziel besteht darin, abzufangen, wenn der Benutzercode Response.Redirect aufruft und die URL ändert, an die der Browser weitergeleitet wird. Um diese URL zu ändern, benötige ich Zugriff auf Session (in Session gespeichert sind Informationen, die mir sagen, was ich in diese URL einfügen soll.) Meistens hänge ich nur ein Abfrageargument an den Redirect-Standort unter Umständen an.ASP.Net PreSendRequestHeaders kann nicht auf Sitzung zugreifen

PreSendRequestHeaders lässt mich Response.RedirectLocation ändern. Das ist gut. Ich kann jedoch von hier aus nicht auf den Sitzungsstatus zugreifen. Es wurde anscheinend veröffentlicht, bevor dieses Ereignis gefeuert wird.

Also, ich brauche einen Weg, um diese Informationen in PreSendRequestHeaders zu bekommen; oder ich brauche einen anderen Weg, dies zu erreichen. Letztendlich ist es mein Ziel, einfach ein Argument an die Abfragezeichenfolge anzuhängen, egal wo der Browser umgeleitet wird.

+0

Warum Sie den einfachen Weg nicht folgen - die Umleitung von Anfang an mit den Parametern machen Sie? – Aristos

+0

Weil ich nicht immer die Kontrolle darüber habe, welcher Code eine Weiterleitung initiiert? – wasabi

Antwort

2

Wenn Sie den Code ändern können, der in Session schreibt, können Sie Context.Items verwenden.

Zum Beispiel vor der Response.RedirectPermanent Methode bestand, habe ich die folgende:

//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"; 
    } 
} 
Verwandte Themen