To do this, you will need to implement your own stream object and use it as a filter for your response.
For isntance:
public class TimerStream : Stream
{
private Stream inner { get; set; }
private StringBuilder responseHtml;
public TimerStream(Stream inputStream) {
inner = inputStream;
responseHtml = new StringBuilder();
}
public override void Write(byte[] buffer, int offset, int count)
{
string bufferedHtml = System.Text.UTF8Encoding.UTF8.GetString (buffer, offset, count);
Regex endTag = new Regex ("</html>", RegexOptions.IgnoreCase);
if (!endTag.IsMatch (bufferedHtml))
{
responseHtml.Append(bufferedHtml);
}
else
{
responseHtml.Append (bufferedHtml);
byte[] data = System.Text.UTF8Encoding.UTF8.GetBytes (responseHtml.ToString ());
inner.Write (data, 0, data.Length);
}
}
}
Then in your HttpModule you add this to your BeginRequest:
HttpResponse response = context.Response;
response.Filter = new TimerStream(context.Response.Filter);
source
share