Language: C#
Capture and Transform Response Output using a Filter
/// <summary> /// Summary description for ResponseFilter. /// </summary> public partial class ResponseFilter : System.Web.UI.Page { protected System.Web.UI.HtmlControls.HtmlForm Form1; protected System.Web.UI.WebControls.TextBox TextBox1; protected void Page_Load(object sender, System.EventArgs e) { // Put user code to initialize the page here if (this.chkEnableFilter.Checked) Response.Filter = new UpperCaseFilter(Response.Filter); else { // We have to redirect to get back to non-encoded page if (IsPostBack) Response.Redirect("ResponseFilter.aspx"); } } } public class UpperCaseFilter : Stream // This filter changes all characters passed through it to uppercase. { private Stream _stream; private long _position; public UpperCaseFilter(Stream sink) { _stream = sink; } // The following members of Stream must be overriden. public override bool CanRead { get { return true; } } public override bool CanSeek { get { return true; } } public override bool CanWrite { get { return true; } } public override long Length { get { return 0; } } public override long Position { get { return _position; } set { _position = value; } } public override long Seek(long offset, System.IO.SeekOrigin direction) { return _stream.Seek(offset, direction); } public override void SetLength(long length) { _stream.SetLength(length); } public override void Close() { _stream.Close(); } public override void Flush() { ms = TransformStream(ms); _stream.Write(ms.ToArray(), 0, (int)ms.Length); _stream.Flush(); } public override int Read(byte[] buffer, int offset, int count) { return _stream.Read(buffer, offset, count); } MemoryStream ms = new MemoryStream(5000); int buffPointer = 0; // The Write method actually does the filtering. public override void Write(byte[] buffer, int offset, int count) { // copy to holding buffer ms.Write(buffer,0, count); buffPointer += count; // _stream.Write(buffer, 0, count); } protected MemoryStream TransformStream(MemoryStream ms) { string text = Encoding.Default.GetString(ms.ToArray()); text = text.Replace("the", "THE BIG REPLACEMENT CAPER"); return new MemoryStream(Encoding.Default.GetBytes(text)); } }
Tags:
Description:
The trick in this routine is to implement Write() by only capturing the output, then using Flush() to get the completed stream and transform it before writing it all back out.
Report Abuse
Subscribe
Discuss
What's new
What is it
New Snippet
Recent Snippets
My Snippets
Web Code
Search

