2010-08-05 3 views
7

aktualisiertWie kann ich feststellen, ob eine Anfrage das Ergebnis eines Postbacks ist?

Ich bin eine benutzerdefinierten Seiten-Caching-Lösung Implementierung und ich will nicht die Anforderung aus dem Cache zwischengespeichert oder abgerufen werden, wenn sie als Reaktion auf eine Formular-Vorlage oder irgendeine Art von asp.net Postbacks sind .

Ich versuche herauszufinden, ob das aktuelle HttpRequest ein Postback ist. Gibt es eine Möglichkeit, dies außerhalb des Kontextes einer Seite oder einer anderen Benutzersteuerung zu tun? In anderen Worten, wenn ich in einem HttpModule bin, habe ich keinen Zugriff auf this.IsPostBack, aber ich muss immer noch feststellen, ob es tatsächlich ein Postback ist.

Auch Postbacks immer "Post" Anfragen oder wird das durch das Enthalten von Formular bestimmt?

danke!

+0

Könnten Sie bitte näher auf die "außerhalb des Kontexts einer Seite oder andere Benutzersteuerung"? – Vaibhav

+1

Sie können kein Postback ohne eine ASP.NET-Seite haben. Ansonsten haben Sie nur einen normalen HTTP-POST. –

+0

Was bedeutet "IsPostBack" für Sie genau? Wie, nur wenn Daten an das Modul übergeben werden ... oder was? –

Antwort

9

Überprüfen Sie die Method Eigenschaft der HttpWebRequest. Postbacks sollten als POST in Method markiert werden.

Auch, wie Sie es in Old-School-ASP getan haben, war zu überprüfen Post-Back-Parameter im Körper der HTTP-Nachricht (Request.Form). Sie könnten den Inhalt der Anfrage nach Daten überprüfen, die wie Postback-Parameter aussehen. Ich bin mir nicht sicher, mit welchem ​​Objekt Sie genau arbeiten, aber wenn es ein HttpWebRequest ist, können Sie den Anforderungsstream von der GetResponseStream()-Methode des Objekts überprüfen.

6
if (Request.ServerVariables["REQUEST_METHOD"] == "POST") { 
    // This is a POST 
} 
+0

Ben McCormack hat eine bessere Antwort, aber im Grunde die gleiche Sache. – jessegavin

1

Sie können einen Verweis auf die aktuelle Seite erhalten: Get current System.Web.UI.Page from HttpContext?

Dann können Sie für die Eigenschaft Page.IsPostBack überprüfen.

+0

Das ist ein guter Fund, und ich stimme es noch, aber es funktioniert immer noch nicht für mich, weil ich in die Pipeline klopfe, bevor der Handler mit der Anfrage verbunden wird und daher HttpContext.Current.Handler immer Null ist. – Micah

+0

In welchem ​​Schritt des Seitenrenderings müssen Sie wissen, ob die Seite Postback ist oder nicht? – David

3

Ein HTTPHandler hat Zugriff auf den aktuellen HTTPContext. Damit prüfen Sie einige Eigenschaften (Request.RequestType, Request.URLReferrer) und entscheiden manuell, ob es sich um ein PostBack handelt.

5

Die folgende statische Routine sollte ermitteln können, ob die aktuelle Anforderung ein Postback ist oder nicht. Es wird jedoch nur funktionieren, wenn Sie eine ASPX-Seite oder eine davon abgeleitete Seite ausführen.

public class PostBackUtility 
{ 
    public static Boolean IsPagePostBack 
    { 
     get 
     { 
      Page pageHandler = HttpContext.Current.CurrentHandler as Page; 
      if (pageHandler == null) return false; 
      return pageHandler.IsPostBack; 
     } 
    } 
} 

sollte auch beachten, dass CurrentHandler noch nicht initialisiert werden kann, je nachdem, welche Stufe in dem Anforderungslebenszyklus Sie versuchen IsPagePostBack zu bewerten. Ich glaube, dass diese Methode nur zwischen HttpApplication.PostMapRequestHandler und HttpApplication.ReleaseRequestState gültig ist.

Verwandte Themen