加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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());
        };
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读