将HttpResponse / Request保存到文件系统

时间:2010-03-15 20:43:47

标签: asp.net screen-scraping save

这是我的情景。用户填写这个基于DB值动态创建的大页面。那些价值观可以改变。当用户填写页面并点击提交时,我们希望将页面的副本保存为服务器上的html,这样如果文本或措辞发生变化,当他们返回查看他们发布的信息时,它在历史上是准确的。 / p>

所以我基本上需要这样做

protected void buttonSave_Click(object sender, EventArgs e)
{
    //collect information into an object to save it in the db       
    bool result = BusinessLogic.Save(myBusinessObject);

    if (result)
        //!!! Here is where I need to save this page as an html file on my servers IFS!!!!
    else
        //whatever

    Response.Redirect("~/SomeOtherPage.aspx");
}

任何帮助都非常适用。此外,我不能只是从URL请求数据,因为在这种情况下查询字符串参数是一个很大的不。拉动数据库信息的关键(在最高级别)是全部在会话中所以我不能请求一个URL并保存它。

谢谢!

2 个答案:

答案 0 :(得分:1)

我认为在“else case”中你可以调用HTMLSnap控件,它会将URL的快照作为图像。但是这不会让用户输入值。它将在加载时具有页面快照。

http://www.guangmingsoft.net/htmlsnapshot/help.htm

正如其他用户提到的那样,由于HTML页面具有所有其他资源,因此无法获得用户输入的值,因此难以获得服务器端。

如果您对用户输入的内容不感兴趣,则上述方法可能有效。

答案 1 :(得分:0)

你必须在这里处理好几个问题。

首先,如果我理解正确,您希望拦截生成的HTML。您可以通过多种方式执行此操作 - 即您可以编写Filter对象 - System.IO.Stream实现,除了通过原始HTML数据流之外,还可以将其复制到一边。这样的对象可以通过其Filter属性连接到HttpResponse。

请记住,并非所有发送到HttpResponse的数据都允许过滤。

然后您将不得不处理另一个问题:当“保存”请求到达您的服务器时,您的原始页面就消失了。它是由于之前的请求/响应往返而发送给用户的,所以除非您有办法在第二次往返时重新创建html,否则您必须暂时将其保存在第一次往返并“提交”第二个 - 当你的buttonSave将被执行时。