【发布时间】:2010-10-24 07:10:11
【问题描述】:
对于某些交易,我需要保存发送到浏览器的完整且准确的 HTML(用于法律跟踪目的)。我怀疑我不确定是否有合适的钩子来执行此操作。有人知道吗? (顺便说一句,我知道还需要保存相关页面,如样式表和图像。)
【问题讨论】:
对于某些交易,我需要保存发送到浏览器的完整且准确的 HTML(用于法律跟踪目的)。我怀疑我不确定是否有合适的钩子来执行此操作。有人知道吗? (顺便说一句,我知道还需要保存相关页面,如样式表和图像。)
【问题讨论】:
您可以创建一个http module 并将输出流保存在某处。
您应该挂钩 PreSendRequestContent 事件...:
在 ASP.NET 将响应内容发送到客户端之前引发此事件。此事件允许我们在内容交付给客户端之前更改内容。我们可以使用此事件将所有页面中通用的内容添加到页面输出中。例如,常见的菜单、页眉或页脚。
【讨论】:
您可以附加到PreSendRequestContent。此事件在内容发送之前引发,让您有机会修改它,或者在您的情况下保存它。
【讨论】:
您可以实现响应过滤器。这是处理 ASP.NET 生成的 HTML 的a nice sample。除了将 HTML 发送到客户端之外,您还应该能够将 HTML 写入数据库或其他合适的存储。
这是一种替代且 IMO 更简单的方法,可将过滤器挂接到您的应用程序中:
在 Global.asax 中,将以下代码放入 Application_BeginRequest 处理程序中:
void Application_BeginRequest(object sender, EventArgs e)
{
Response.Filter = new HtmlSavingFilter(Response.Filter);
}
【讨论】:
我想您只想为某些页面保存呈现的 html。如果是这样,我一直在我的一个应用程序中使用以下方法,该应用程序将呈现的 html 存储在磁盘上的某处以进行缓存。这个方法只是简单地覆盖了页面的渲染事件。
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);
}
}
真的很适合我。
【讨论】:
也有专门为此目的制造的硬件设备。我们使用了一种名为“PageVault”的方法。
【讨论】: