This step-by-step article describes how to retrieve the HTML results of a page as a stream and then download the stream to a file. When you use the
FileStream object and set the
Response.Filter property to the
FileStream object, all HTTP output that
Response.Write sends also downloads as stream to a file.
Create a Web Form
To create a Web Form:
| 1. |
In Visual C# .NET, create a new ASP.NET Web Application project named ASPNETFilter. |
| 2. |
Right-click the designer pane of WebForm1.aspx. |
| 3. |
Click View HTML Source to edit the HTML code. |
| 4. |
Replace the existing code with the following code :
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="ASPNETFilter.WebForm1" %>
<HTML>
<HEAD>
<title>SaveResponse</title>
</HEAD>
<body>
<form id="SaveResponse" method="post" runat="server">
<asp:TextBox ID="TextBox1" Text="Textbox 1" Runat="server" /><br>
<asp:ListBox ID="Listbox1" Runat="server" Size="3">
<asp:ListItem Value="0">Zero</asp:ListItem>
<asp:ListItem Value="1" Selected="True">One</asp:ListItem>
<asp:ListItem Value="2">Two</asp:ListItem>
</asp:ListBox><br>
<asp:CheckBox ID="Checkbox1" Runat="server" Checked="True" Text="Checkbox 1" />
</form>
</body>
</HTML>
|
Create the ResponseFilter Class
To create the
ResponseFilter class:
| 1. |
Add a new class named ResponseFilter.cs. |
| 2. |
Replace the existing code with the following code:
using System;
using System.IO;
namespace ASPNETFilter
{
public class ResponseFilter : Stream
{
private Stream m_sink;
private long m_position;
private FileStream fs;
public ResponseFilter(Stream sink)
{
m_sink = sink;
fs = new FileStream(@"C:\FilterOutput\response.htm", FileMode.OpenOrCreate, FileAccess.Write);
}
// The following members of Stream must be overriden.
public override bool CanRead
{get { return true; }}
public override bool CanSeek
{get { return false; }}
public override bool CanWrite
{get { return false; }}
public override long Length
{get { return 0; }}
public override long Position
{
get { return m_position; }
set { m_position = value; }
}
public override long Seek(long offset, System.IO.SeekOrigin direction)
{
return 0;
}
public override void SetLength(long length)
{
m_sink.SetLength(length);
}
public override void Close()
{
m_sink.Close();
fs.Close();
}
public override void Flush()
{
m_sink.Flush();
}
public override int Read(byte[] buffer, int offset, int count)
{
return m_sink.Read(buffer, offset, count);
}
// Override the Write method to filter Response to a file.
public override void Write(byte[] buffer, int offset, int count)
{
//Write out the response to the browser.
m_sink.Write(buffer, 0, count);
//Write out the response to the file.
fs.Write(buffer, 0, count);
}
}
}
Note Before you run the Web application:
| 1. |
Create a folder named C:\FilterOutput. |
| 2. |
Grant read and write access on the folder for the ASPNET user. |
|
Use the Response Filter Class
| 1. |
In Solution Explorer, select WebForm1.aspx. |
| 2. |
Right-click and then select View Code. |
| 3. |
Add the following code to theOnInit event code:
Response.Filter = new ResponseFilter(Response.Filter);
|
Test the ResponseFilter
| 1. |
Save the changes to the ASPNETFilter Web project. |
| 2. |
On the Build menu, select Build Solution. |
| 3. |
Start Microsoft Internet Explorer, and then open WebForm1.aspx by specifying the following URL, where IISServerName is the name of your Microsoft Internet Information Services (IIS) server:
http://IISServerName/ASPNETFilter/WebForm1.aspx
|
| 4. |
Find the Response.htm file in the C:\FilterOutput folder. |