2011-12-16 12 views

答えて

0

も下のリンクをご確認ください:http://www.west-wind.com/weblog/posts/2004/Jun/08/Capturing-Output-from-ASPNet-Pages

いい質問を、私は試してみると、私はあなたが記述している何をすべきかHttpModuleを作成することができるかどうかを確認する必要がありました。

レスポンスストリームから読み込もうとしたことはありませんでしたが、ResponseFilterを使用するとコンテンツをキャプチャすることができました。

次のコードはかなりうまくいくようですが、コードをベースとして使うことができると思いました。しかし、これはちょうど私が一緒に速く一緒に投げたものであることを忘れないでください、それは決してテストされていません。したがって、適切なレビューやテストなどが行われていない環境では、その製品を使用しないでください。 Capturing HTML generated from ASP.NET

+0

私がもし答えヘルプの上にあなたを知ってみましょう!!!!:

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 } 

リファレンス質問);しかし、それにコメントすること自由に感じなさい – sikender

+0

ASPアプリケーションで作業するのは簡単ですか?私はASPとASP.NETアプリケーションの両方をサポートすべき単一のコンポーネントを開発する必要があると思います:WCF RESTサービスで作業することは可能ですか? – subramani

+0

はい、そうです。このコードを使用してサービスを行う必要があります。 – sikender

関連する問題