Câu hỏi hay, tôi phải thử và xem liệu tôi có thể tạo một HttpModule để làm những gì bạn mô tả không.
Tôi không có bất kỳ may mắn nào đang cố đọc từ hồi đáp, nhưng việc sử dụng ResponseFilter đã cho tôi một cách để nắm bắt nội dung.
Mã sau đây có vẻ hoạt động khá tốt và tôi có thể đoán rằng bạn có thể sử dụng mã làm cơ sở. Nhưng hãy nhớ điều này chỉ là một cái gì đó tôi đã ném cùng nhau nhanh chóng, nó đã không được thử nghiệm trong bất kỳ cách nào. Vì vậy, không sử dụng nó trong bất kỳ môi trường sản xuất mà không cần xem xét/kiểm tra thích hợp và như vậy. Hãy bình luận về nó mặc dù;)
public class ResponseLoggerModule : IHttpModule
{
private class ResponseCaptureStream : Stream
{
private readonly Stream _streamToCapture;
private readonly Encoding _responseEncoding;
private string _streamContent;
public string StreamContent
{
get { return _streamContent; }
private set
{
_streamContent = value;
}
}
public ResponseCaptureStream(Stream streamToCapture, Encoding responseEncoding)
{
_responseEncoding = responseEncoding;
_streamToCapture = streamToCapture;
}
public override bool CanRead
{
get { return _streamToCapture.CanRead; }
}
public override bool CanSeek
{
get { return _streamToCapture.CanSeek; }
}
public override bool CanWrite
{
get { return _streamToCapture.CanWrite; }
}
public override void Flush()
{
_streamToCapture.Flush();
}
public override long Length
{
get { return _streamToCapture.Length; }
}
public override long Position
{
get
{
return _streamToCapture.Position;
}
set
{
_streamToCapture.Position = value;
}
}
public override int Read(byte[] buffer, int offset, int count)
{
return _streamToCapture.Read(buffer, offset, count);
}
public override long Seek(long offset, SeekOrigin origin)
{
return _streamToCapture.Seek(offset, origin);
}
public override void SetLength(long value)
{
_streamToCapture.SetLength(value);
}
public override void Write(byte[] buffer, int offset, int count)
{
_streamContent += _responseEncoding.GetString(buffer);
_streamToCapture.Write(buffer, offset, count);
}
public override void Close()
{
_streamToCapture.Close();
base.Close();
}
}
#region IHttpModule Members
private HttpApplication _context;
public void Dispose()
{
}
public void Init(HttpApplication context)
{
_context = context;
context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);
context.PreSendRequestContent += new EventHandler(context_PreSendRequestContent);
}
void context_PreRequestHandlerExecute(object sender, EventArgs e)
{
_context.Response.Filter = new ResponseCaptureStream(_context.Response.Filter, _context.Response.ContentEncoding);
}
void context_PreSendRequestContent(object sender, EventArgs e)
{
ResponseCaptureStream filter = _context.Response.Filter as ResponseCaptureStream;
if (filter != null)
{
string responseText = filter.StreamContent;
// Logging logic here
}
}
#endregion
}
Nguồn
2008-12-22 16:21:59
Để viết ngắn gọn, hãy ghi đè lên phương pháp hiển thị cho trang. Câu hỏi và câu trả lời tương tự [ở đây] (http://stackoverflow.com/questions/56279/export-aspx-to-html) –