zoukankan      html  css  js  c++  java
  • HttpResponse.Filter

    MSDN:获取或设置一个包装筛选器对象,该对象用于在传输之前修改 HTTP 实体主体。

    这个的关键在于实现筛选器对像,查看Filter接受的类型是Stream。所以可以自定义一个Stream类,当创建 Stream 对象并将 Filter 属性设置为 Stream 对象时,所有发送的 HTTP 输出将通过筛选器。

    
    
    
    
    自定义Stream类
    public class ChangeStream : System.IO.Stream
    {
        private System.IO.Stream output;
        public ChangeStream(Stream s)
        {
            output = s;
        }
        public override bool CanRead
        {
            get { return output.CanRead; }
        }
    
        public override bool CanSeek
        {
            get { return output.CanSeek; }
        }
    
        public override bool CanWrite
        {
            get { return output.CanWrite; }
        }
    
        public override void Flush()
        {
            output.Flush();
        }
    
        public override long Length
        {
            get { return output.Length; }
        }
    
        public override long Position
        {
            get
            {
                return output.Position;
            }
            set
            {
                output.Position = value;
            }
        }
    
        public override int Read(byte[] buffer, int offset, int count)
        {
            return output.Read(buffer, offset, count);
        }
    
        public override long Seek(long offset, System.IO.SeekOrigin origin)
        {
            return output.Seek(offset, origin);
        }
    
        public override void SetLength(long value)
        {
            output.SetLength(value);
        }
    
        public override void Write(byte[] buffer, int offset, int count)
        {
            StringComparison ignore = StringComparison.CurrentCultureIgnoreCase;
            if (HttpContext.Current != null)
            {
                HttpContext context = HttpContext.Current;
                if (context.Response.ContentType.Equals("text/html", ignore))
                {
                    Encoding encoding = context.Response.ContentEncoding;
                    string html = encoding.GetString(buffer, offset, count)
                        .ToUpper();
                    byte[] bytes = encoding.GetBytes(html);
                    output.Write(bytes, 0, bytes.Length);
                }
                else
                    output.Write(buffer, offset, count);
            }
        }
    }

    在页面上调用:

     Response.Filter = new ChangeStream(Response.Filter);
            Response.Write("gm");

    aspx页面:

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        asdfasdf
        </div>
        </form>
    </body>
    </html>
    输出结果:
    GM
    ASDFASDF
    就是这么简单,哈哈。
    根据Response.Filter的这个功能可以实现对hmtl页面压缩。
    主要代码如下:
     private const string GZIP = "gzip";
            private const string DEFLATE = "deflate";
            private bool IsEncodingAccepted(string encoding)
            {
    
                return Request.Headers["Accept-encoding"] != null && Request.Headers["Accept-encoding"].Contains(encoding);
    
            }
    
            private void SetEncoding(string encoding)
            {
                Response.AppendHeader("Content-encoding", encoding);
            }
    
    
    
    使用方式
       if (IsEncodingAccepted(GZIP))
                    {
                        Response.Filter = new GZipStream(Response.Filter, CompressionMode.Compress);
                        SetEncoding(GZIP);
    
                    }
    
                    else if (IsEncodingAccepted(DEFLATE))
                    {
    
                        Response.Filter = new DeflateStream(Response.Filter, CompressionMode.Compress);
                        SetEncoding(DEFLATE);
                    }
  • 相关阅读:
    代码整洁之道 读书笔记
    AJAX分页带页码
    下拉框绑定数据
    Excel导入导出
    万能分页存储过程
    android 更新uI主线程
    eclipse配置j2ee项目
    java常见错误云集与注意事项
    亚马逊服务器搭建
    常见sql的error解决方法
  • 原文地址:https://www.cnblogs.com/guolihao/p/2957659.html
Copyright © 2011-2022 走看看