- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Web;
-
- namespace TestWebApplication
- {
- public class ResponseSniffModule : IHttpModule
- {
- public void Dispose()
- {
-
- }
-
- public void Init(HttpApplication context)
- {
- context.PreRequestHandlerExecute += context_PreRequestHandlerExecute;
- context.PreSendRequestContent += context_PreSendRequestContent;
- }
-
- void context_PreRequestHandlerExecute(object sender, EventArgs e)
- {
- var application = sender as HttpApplication;
- var context = application.Context;
- var response = context.Response;
-
- // Add a filter to capture response stream
- response.Filter = new ResponseSniffer(response.Filter);
- }
-
- void context_PreSendRequestContent(object sender, EventArgs e)
- {
- var application = sender as HttpApplication;
- var context = application.Context;
- var response = context.Response;
-
- var filter = response.Filter as ResponseSniffer;
-
- if (filter != null)
- {
- var reader = new StreamReader(new MemoryStream(filter.RecordStream.GetBuffer()));
- var source = reader.ReadToEnd();
- }
- }
- }
-
- public class ResponseSniffer : Stream
- {
- private readonly Stream ResponseStream;
-
- public MemoryStream RecordStream { get; set; }
-
- #region Implements of Stream
- public override bool CanRead
- {
- get { return ResponseStream.CanRead; }
- }
-
- public override bool CanSeek
- {
- get { return ResponseStream.CanSeek; }
- }
-
- public override bool CanWrite
- {
- get { return ResponseStream.CanWrite; }
- }
-
- public override void Flush()
- {
- ResponseStream.Flush();
- }
-
- public override long Length
- {
- get { return ResponseStream.Length; }
- }
-
- public override long Position
- {
- get
- {
- return ResponseStream.Position;
- }
- set
- {
- ResponseStream.Position = value;
- }
- }
-
- public override int Read(byte[] buffer, int offset, int count)
- {
- return ResponseStream.Read(buffer, offset, count);
- }
-
- public override long Seek(long offset, SeekOrigin origin)
- {
- return Seek(offset, origin);
- }
-
- public override void SetLength(long value)
- {
- ResponseStream.SetLength(value);
- }
-
- public override void Write(byte[] buffer, int offset, int count)
- {
- RecordStream.Write(buffer, offset, count);
- ResponseStream.Write(buffer, offset, count);
- }
- #endregion
-
- public ResponseSniffer(Stream stream)
- {
- RecordStream = new MemoryStream();
- ResponseStream = stream;
- }
- }
- }