HOW TO: Archive the Results of a Dynamic Page to an HTML Page in ASP.NET by Using Visual C# .NET (810205)



The information in this article applies to:

  • Microsoft ASP.NET (included with the .NET Framework 1.1)
  • Microsoft ASP.NET (included with the .NET Framework) 1.0
  • Microsoft Visual C# .NET (2003)
  • Microsoft Visual C# .NET (2002)

For a Microsoft Visual Basic .NET version of this article, see 811162.

SUMMARY

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.
back to the top

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>
    
back to the top

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.
back to the top

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);
back to the top

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.
back to the top

REFERENCES

For more information, visit the following Microsoft Developer Network (MSDN) Web site: back to the top

Modification Type:MajorLast Reviewed:5/21/2003
Keywords:kbWebForms kbFileIO kbhowto KB810205 kbAudDeveloper kbAudITPRO