2009-05-06 8 views
1

Ich muss den vollständigen und genauen HTML-Code speichern, der für einige Transaktionen an den Browser gesendet wird (für legale Tracking-Zwecke.) Ich bin mir nicht sicher, ob es einen geeigneten Hook dafür gibt. Weiß jemand? (Übrigens ist mir bewusst, dass auch zugehörige Seiten wie Stylesheets und Bilder gespeichert werden müssen.)ASP.NET HTML speichern An Browser gesendet

Antwort

1

Sie könnten einen Antwortfilter implementieren. Hier ist a nice sample, die den von ASP.NET erzeugten HTML-Code verarbeitet. Zusätzlich zu dem HTML, das an den Client gesendet wird, sollten Sie in der Lage sein, den HTML-Code auch in eine Datenbank oder einen anderen geeigneten Speicher zu schreiben. Hier

ist eine alternative und IMO viel einfacher Weg, um die Filter in Ihre Anwendung Haken:

in Global.asax, den folgenden Code in der Application_BeginRequest Handler:

void Application_BeginRequest(object sender, EventArgs e) 
{ 
    Response.Filter = new HtmlSavingFilter(Response.Filter); 
} 
2

Sie können ein erstellen http module und den Ausgabestrom irgendwo gespeichert haben.

Sie sollten PreSendRequestContent Ereignis Haken ...:

Dieses Ereignis wird ausgelöst, kurz bevor ASP.NET die Antwortinhalte an den Client sendet. Mit diesem Ereignis können wir den Inhalt ändern, bevor er an den Client übermittelt wird. Wir können dieses Ereignis verwenden, um die Inhalte, die auf allen Seiten üblich sind, der Seitenausgabe hinzuzufügen. Zum Beispiel ein gemeinsames Menü, Kopf- oder Fußzeile.

0

Darüber hinaus gibt es speziell für diesen Zweck hergestellten Hardware-Geräte. Wir haben eine namens "PageVault" verwendet.

1

Ich vermute, dass Sie nur das gerenderte HTML für bestimmte Seiten speichern möchten. Wenn ja, habe ich den folgenden Ansatz in einer meiner Anwendungen verwendet, die den gerenderten HTML-Code zum Zweck der Zwischenspeicherung irgendwo auf der Festplatte speichert. Diese Methode überschreibt einfach das Renderereignis der Seite.

protected override void Render(HtmlTextWriter writer) 
{ 
    using (HtmlTextWriter htmlwriter = new HtmlTextWriter(new System.IO.StringWriter())) 
    { 
     base.Render(htmlwriter); 
     string html = htmlwriter.InnerWriter.ToString(); 


     using (FileStream outputStream = new FileStream(@"C:\\temp.html", FileMode.OpenOrCreate)) 
     { 
      outputStream.Write(html, 0, html.Length); 
      outputStream.Close(); 
     } 

     writer.Write(html); 
    } 
} 

Wirklich funktioniert gut für mich.