1

我需要为某些交易保存发送到浏览器的完整且准确的 HTML(用于法律跟踪目的)。我怀疑我不确定是否有合适的钩子来执行此操作。有人知道吗?(顺便说一句,我知道还需要保存相关页面,如样式表和图像。)

4

5 回答 5

2

您可以创建一个http 模块并将输出流保存在某处。

您应该挂钩 PreSendRequestContent 事件...:

此事件在 ASP.NET 将响应内容发送到客户端之前引发。此事件允许我们在内容交付给客户端之前更改内容。我们可以使用此事件将所有页面中通用的内容添加到页面输出中。例如,常见的菜单、页眉或页脚。

于 2009-05-06T19:42:11.010 回答
2

您可以附加到PreSendRequestContent。此事件在内容发送之前引发,让您有机会修改它,或者在您的情况下保存它。

关于拦截模式的 P&P 文章

于 2009-05-06T19:43:25.560 回答
1

您可以实现响应过滤器。这是一个处理 ASP.NET 生成的 HTML 的好示例。除了将 HTML 发送到客户端之外,您还应该能够将 HTML 写入数据库或其他合适的存储。

这是将过滤器挂接到您的应用程序中的另一种 IMO 更简单的方法:

在 Global.asax 中,将以下代码放在 Application_BeginRequest 处理程序中:

void Application_BeginRequest(object sender, EventArgs e)
{
    Response.Filter = new HtmlSavingFilter(Response.Filter);
}
于 2009-05-06T19:41:45.643 回答
1

我想您只想为某些页面保存呈现的 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);
    }
}

真的很适合我。

于 2009-06-04T09:20:40.280 回答
0

也有专门为此目的制造的硬件设备。我们使用了一种名为“ PageVault ”的方法。

于 2009-05-06T20:10:07.557 回答