<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://forums.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Tips &amp; Tricks</title><link>http://forums.asp.net/53.aspx</link><description>Cool code and exciting examples, provided by our members.</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>Re: Using Response.Filter</title><link>http://forums.asp.net/thread/448205.aspx</link><pubDate>Tue, 20 Jan 2004 03:24:08 GMT</pubDate><guid isPermaLink="false">4c671506-2930-414c-a40b-8bf57ded5924:448205</guid><dc:creator>iwilld0it</dc:creator><slash:comments>0</slash:comments><comments>http://forums.asp.net/thread/448205.aspx</comments><wfw:commentRss>http://forums.asp.net/commentrss.aspx?SectionID=53&amp;PostID=448205</wfw:commentRss><description>I made a slight inefficiency within the global replace ... here is the ajusted portion of the code ...
&lt;br /&gt;

&lt;br /&gt;
&lt;pre&gt;
&lt;br /&gt;
        Public Overrides Sub Write(ByVal buffer() As Byte, ByVal offset As Integer, ByVal count As Integer)
&lt;br /&gt;

&lt;br /&gt;
            ' Place Response Text In A String Builder
&lt;br /&gt;

&lt;br /&gt;
            Dim output As New StringBuilder(mEncoding.GetString(buffer, offset, count))
&lt;br /&gt;

&lt;br /&gt;
            ' HERE IS THE ADJUSTMENT: Perform Global Replaces
&lt;br /&gt;
            Call output.Replace(&amp;quot;{HOST}&amp;quot;, &amp;quot;http://www.mysite.com&amp;quot;)
&lt;br /&gt;

&lt;br /&gt;
            ' Write The Newly Modified Response Stream
&lt;br /&gt;

&lt;br /&gt;
            mFilter.Write(mEncoding.GetBytes(output.ToString), 0, output.Length)
&lt;br /&gt;

&lt;br /&gt;
        End Sub
&lt;br /&gt;

&lt;br /&gt;
    End Class
&lt;br /&gt;

&lt;br /&gt;
&lt;/pre&gt;</description></item><item><title>Using Response.Filter</title><link>http://forums.asp.net/thread/447804.aspx</link><pubDate>Mon, 19 Jan 2004 18:54:00 GMT</pubDate><guid isPermaLink="false">4c671506-2930-414c-a40b-8bf57ded5924:447804</guid><dc:creator>iwilld0it</dc:creator><slash:comments>0</slash:comments><comments>http://forums.asp.net/thread/447804.aspx</comments><wfw:commentRss>http://forums.asp.net/commentrss.aspx?SectionID=53&amp;PostID=447804</wfw:commentRss><description>For those of u interested in using the Response.Filter property. Here is a custom filter class I wrote ...
&lt;br /&gt;

&lt;br /&gt;
&lt;pre&gt;
&lt;br /&gt;
    Public Class ResponseFilter
&lt;br /&gt;
        Inherits IO.Stream
&lt;br /&gt;

&lt;br /&gt;
        Private mFilter As IO.Stream
&lt;br /&gt;
        Private mEncoding As System.Text.Encoding
&lt;br /&gt;

&lt;br /&gt;
        Sub New()
&lt;br /&gt;
            With HttpContext.Current.Response
&lt;br /&gt;
                mFilter = .Filter
&lt;br /&gt;
                mEncoding = .ContentEncoding
&lt;br /&gt;
            End With
&lt;br /&gt;
        End Sub
&lt;br /&gt;

&lt;br /&gt;
        Public Overrides ReadOnly Property CanRead() As Boolean
&lt;br /&gt;
            Get
&lt;br /&gt;
                Return mFilter.CanRead
&lt;br /&gt;
            End Get
&lt;br /&gt;
        End Property
&lt;br /&gt;

&lt;br /&gt;
        Public Overrides ReadOnly Property CanSeek() As Boolean
&lt;br /&gt;
            Get
&lt;br /&gt;
                Return mFilter.CanSeek
&lt;br /&gt;
            End Get
&lt;br /&gt;
        End Property
&lt;br /&gt;

&lt;br /&gt;
        Public Overrides ReadOnly Property CanWrite() As Boolean
&lt;br /&gt;
            Get
&lt;br /&gt;
                Return mFilter.CanWrite
&lt;br /&gt;
            End Get
&lt;br /&gt;
        End Property
&lt;br /&gt;

&lt;br /&gt;
        Public Overrides Sub Flush()
&lt;br /&gt;
            Call mFilter.Flush()
&lt;br /&gt;
        End Sub
&lt;br /&gt;

&lt;br /&gt;
        Public Overrides ReadOnly Property Length() As Long
&lt;br /&gt;
            Get
&lt;br /&gt;
                Return mFilter.Length
&lt;br /&gt;
            End Get
&lt;br /&gt;
        End Property
&lt;br /&gt;

&lt;br /&gt;
        Public Overrides Property Position() As Long
&lt;br /&gt;
            Get
&lt;br /&gt;
                Return mFilter.Position
&lt;br /&gt;
            End Get
&lt;br /&gt;
            Set(ByVal Value As Long)
&lt;br /&gt;
                mFilter.Position = Value
&lt;br /&gt;
            End Set
&lt;br /&gt;
        End Property
&lt;br /&gt;

&lt;br /&gt;
        Public Overrides Function Read(ByVal buffer() As Byte, ByVal offset As Integer, ByVal count As Integer) As Integer
&lt;br /&gt;
            If mFilter.CanRead Then
&lt;br /&gt;
                Return mFilter.Read(buffer, offset, count)
&lt;br /&gt;
            Else
&lt;br /&gt;
                Return -1
&lt;br /&gt;
            End If
&lt;br /&gt;
        End Function
&lt;br /&gt;

&lt;br /&gt;
        Public Overrides Function Seek(ByVal offset As Long, ByVal origin As System.IO.SeekOrigin) As Long
&lt;br /&gt;
            If mFilter.CanSeek Then
&lt;br /&gt;
                Return mFilter.Seek(offset, origin)
&lt;br /&gt;
            Else
&lt;br /&gt;
                Return -1
&lt;br /&gt;
            End If
&lt;br /&gt;
        End Function
&lt;br /&gt;

&lt;br /&gt;
        Public Overrides Sub SetLength(ByVal value As Long)
&lt;br /&gt;
            Call mFilter.SetLength(value)
&lt;br /&gt;
        End Sub
&lt;br /&gt;

&lt;br /&gt;
        Public Overrides Sub Write(ByVal buffer() As Byte, ByVal offset As Integer, ByVal count As Integer)
&lt;br /&gt;
            ' Place Response Text In A String Builder
&lt;br /&gt;
            Dim output As New StringBuilder(mEncoding.GetString(buffer, offset, count))
&lt;br /&gt;

&lt;br /&gt;
            ' Perform Global Replaces
&lt;br /&gt;
            output = output.Replace(&amp;quot;{HOST}&amp;quot;, &amp;quot;http://www.mysite.com&amp;quot;)
&lt;br /&gt;

&lt;br /&gt;
            ' Write The Newly Modified Response Stream
&lt;br /&gt;
            mFilter.Write(mEncoding.GetBytes(output.ToString), 0, output.Length)
&lt;br /&gt;
        End Sub
&lt;br /&gt;
    End Class
&lt;br /&gt;
&lt;/pre&gt;
&lt;br /&gt;

&lt;br /&gt;
You can call Response.Filter in a global handler in global.asax like so ...
&lt;br /&gt;

&lt;br /&gt;
&lt;pre&gt;
&lt;br /&gt;
    Private Sub Global_PreRequestHandlerExecute(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.PreRequestHandlerExecute
&lt;br /&gt;

&lt;br /&gt;
         Response.Filter = New ResponseFilter()
&lt;br /&gt;

&lt;br /&gt;
    End Sub
&lt;br /&gt;
&lt;/pre&gt;
&lt;br /&gt;

&lt;br /&gt;
Create a test page and see of it works ...
&lt;br /&gt;

&lt;br /&gt;
MyTest.aspx
&lt;br /&gt;
--------------
&lt;br /&gt;

&lt;br /&gt;
&lt;pre&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;
&lt;br /&gt;
   &lt;a target="_new" href="{HOST}/MyFolder/default.aspx"&gt;My Page&lt;/a&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;
&lt;br /&gt;
&lt;/pre&gt;
&lt;br /&gt;

&lt;br /&gt;
The Filtered HTML will translate to ...
&lt;br /&gt;

&lt;br /&gt;
&lt;pre&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;
&lt;br /&gt;
   &amp;lt;a href=&amp;quot;http://www.mysite.com/MyFolder/default.aspx&amp;quot;&amp;gt;;My Page&amp;lt;/a &amp;gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;
&lt;br /&gt;
&lt;/pre&gt;
&lt;br /&gt;</description></item></channel></rss>