c# – 如何从HttpModule中检索响应html?
发布时间:2020-12-15 03:42:00 所属栏目:百科 来源:网络整理
导读:这是我特意试图做的: 我已经写了一个HttpModule做一些站点的跟踪.我们网站上的一些旧的.aspx页面是硬编码的,没有真正的控件,但它们是.aspx文件,因此我们的模块在请求时仍然运行. 我的模块的处理程序附加到PostRequestHandlerExecute,所以我相信将被发送回请
这是我特意试图做的:
我已经写了一个HttpModule做一些站点的跟踪.我们网站上的一些旧的.aspx页面是硬编码的,没有真正的控件,但它们是.aspx文件,因此我们的模块在请求时仍然运行. 我的模块的处理程序附加到PostRequestHandlerExecute,所以我相信将被发送回请求者应该已经确定了. 我需要能够提取标题标签中的任何字符串. 因此,如果 <title>Chunky Bacon</title> 在最终呈现的HTML中发送到请求者.然后我想要“Chunky Bacon”. 想法? 解决方法
有趣的小挑战
以下是代码: StreamWatcher.cs public class StreamWatcher : Stream { private Stream _base; private MemoryStream _memoryStream = new MemoryStream(); public StreamWatcher(Stream stream) { _base = stream; } public override void Flush() { _base.Flush(); } public override int Read(byte[] buffer,int offset,int count) { return _base.Read(buffer,offset,count); } public override void Write(byte[] buffer,int count) { _memoryStream.Write(buffer,count); _base.Write(buffer,count); } public override string ToString() { return Encoding.UTF8.GetString(_memoryStream.ToArray()); } #region Rest of the overrides public override bool CanRead { get { throw new NotImplementedException(); } } public override bool CanSeek { get { throw new NotImplementedException(); } } public override bool CanWrite { get { throw new NotImplementedException(); } } public override long Seek(long offset,SeekOrigin origin) { throw new NotImplementedException(); } public override void SetLength(long value) { throw new NotImplementedException(); } public override long Length { get { throw new NotImplementedException(); } } public override long Position { get { throw new NotImplementedException(); } set { throw new NotImplementedException(); } } #endregion } TitleModule.cs public class TitleModule : IHttpModule { public void Dispose() { } private static Regex regex = new Regex(@"(?<=<title>)[wsrn]*?(?=</title)",RegexOptions.Compiled | RegexOptions.IgnoreCase); private StreamWatcher _watcher; public void Init(HttpApplication context) { context.BeginRequest += (o,e) => { _watcher = new StreamWatcher(context.Response.Filter); context.Response.Filter = _watcher; }; context.EndRequest += (o,e) => { string value = _watcher.ToString(); Trace.WriteLine(regex.Match(value).Value.Trim()); }; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |