【问题标题】:Dynamic HTML content capture from ASP and ASP.NET从 ASP 和 ASP.NET 捕获动态 HTML 内容
【发布时间】:2012-01-21 20:16:26
【问题描述】:

如何从 ASP.NET 按钮单击事件中捕获动态 HTML 内容?

对于 ASP 也有同样的功能。

请指导我。

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    请查看以下链接:http://www.west-wind.com/weblog/posts/2004/Jun/08/Capturing-Output-from-ASPNet-Pages

    好问题,我必须尝试一下,看看是否可以创建一个 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 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
    }
    

    参考问题:Capturing HTML generated from ASP.NET

    【讨论】:

    • 是否可以在 ASP 应用程序中工作?我期望我需要开发一个应该支持 ASP 和 ASP.NET 应用程序的单个组件:) 是否可以在 WCF REST 服务中工作?
    • 感谢您的回复。在我的 WCF REST 服务中,有方法 GetData(string url),像 ASP 或 ASP.NET 这样的客户端应用程序将调用该方法,传递像 http:\\localhost\ 这样的 URL test\default.aspx ... 基于它将写入 (.html) 文件的 URL。它在静态页面中工作,但是像单击按钮这样的动态内容它将从数据库中获取记录并在状态时绑定到网格中它不起作用我应该如何集成上面的代码......请指导我
    • 查看以上链接。我认为它对你有帮助。
    • 感谢它对 ASP.NET 应用程序的正常工作,指导我使用 ASP 应用程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 2010-09-28
    • 2021-08-07
    相关资源
    最近更新 更多