捕获从ASP.NET生成的HTML
发布时间:2020-05-28 01:21:43 所属栏目: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
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- asp.net – 在表单提交时禁用按钮
- asp.net – 可能导致XML解析错误:没有找到元素?
- asp.net-mvc-3 – 如何在MVC路由中组合CatchAll和
- asp.net – 将linq连接到sql datacontext到业务层
- asp.net – 什么方法可以防止母版页更改元素ID?
- asp.net – IIS7,SSL和“由于请求实体太大,因此未
- jQuery Ajax方法调用 Asp.Net WebService 的详细
- asp.net-mvc – ASP.NET MVC模型绑定外键关系
- asp.net-web-api – webapi批处理和委托处理程序
- oauth-2.0 – 覆盖AccessTokenExpireTimeSpan
热点阅读
