zoukankan      html  css  js  c++  java
  • 通过httpmodule获取webapi返回的信息

    我写了一个webapi,想在module中获取请求的信息和返回的信息,写进log里,以方便以后查询。request信息很容易能拿到,但是返回信息得费一番周折。不多说,上代码

    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
    }

    参考文献:http://stackoverflow.com/questions/386487/capturing-html-generated-from-asp-net

  • 相关阅读:
    (笔试题)镇长选举
    (笔试题)最小的非“重复的数”
    ( 笔试题)只出现一次的数
    (算法)二叉树中两个结点的最近公共父结点
    (笔试题)区间最大重叠
    (剑指Offer)面试题61:按之字形顺序打印二叉树
    (算法)Partition方法求数组第k大的数
    (剑指Offer)面试题60:把二叉树打印成多行
    整理一些不错的、网上好评的电影、电视、视频等资源地址
    个人网站/博客,建站好的域名和网站供应商网站整理
  • 原文地址:https://www.cnblogs.com/Percy/p/6771335.html
Copyright © 2011-2022 走看看