捕获从ASP.NET生成的HTML
发布时间:2020-12-16 00:29:11 所属栏目:asp.Net 来源:网络整理
导读:如何最好地捕获由aspx页面呈现的HTML(在我的实例中,用于日志记录)? 我不想使用Response.Write写回页面,因为它弄乱了我的网站布局。 使用Response.OutputStream或Response.Output的流会导致ArgumentException({System.ArgumentException:Stream不可读)。
如何最好地捕获由aspx页面呈现的HTML(在我的实例中,用于日志记录)?
我不想使用Response.Write写回页面,因为它弄乱了我的网站布局。 使用Response.OutputStream或Response.Output的流会导致ArgumentException({System.ArgumentException:Stream不可读)。 解决方法
好的问题,我不得不尝试看看我是否可以创建一个HttpModule来做你正在描述的内容。
我没有任何运气尝试从责任心读取,但使用ResponseFilter给了我一种方法来捕获的内容。 以下代码似乎工作得很好,我想也许你可以使用代码作为基础。但请记住,这只是我快速投掷的东西,没有以任何方式进行测试。所以不要在任何生产环境中使用它,没有适当的检查/测试等等。随意评论它;) 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 count) { _streamContent += _responseEncoding.GetString(buffer); _streamToCapture.Write(buffer,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 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- .net – 如何更改乌节纪录库
- asp.net-mvc – ASP.NET MVC:从控制器返回CDN图像
- asp.net-mvc – 使用MVC使用List填充@ Html.DropDownList
- asp.net – 跨线程使用HTTPContext
- 使用ASP.NET MVC的jQuery表单验证
- .net-4.0 – 从3.5升级到ASP.net 4.0后登录失败
- asp.net-identity – AspNet Identity使用相同的电子邮件进
- asp.net-core – 如何获取有关运行时.Net Core的信息
- Asp.net:实现自动注销功能
- asp.net-mvc – 为什么在视图引擎中指定位置时,viewstart文
推荐文章
站长推荐
- asp.net-mvc – SquishIt MVC – 调试模式,不刷新
- asp.net 文件上传实例汇总
- 最好的ASP.net WYSIWYG
- asp.net-mvc – 如果Hangfire已经运行,请停止启动
- asp.net-mvc – MVC中的绑定集合
- asp.net – 带有查询字符串的server.Transfer
- asp.net – 使用Using语句的SQLConnection,从里面
- asp.net-mvc-3 – 如何在Razor视图引擎中注册程序
- asp.net-mvc – 如何在使用Html.BeginForm时使用
- asp.net-mvc – 您使用ASP.NET MVC的View Engine
热点阅读