zoukankan      html  css  js  c++  java
  • Asp.Net MVC 页面代码压缩筛选器-自定义删除无效内容

    Asp.Net MVC 页面代码压缩筛选器

    首先定义以下筛选器,用于代码压缩。

    /*页面压缩 筛选器*/
        public class WhiteSpaceFilter : Stream
        {
            private Stream _shrink;
            private Func<string, string> _filter;
    
            public WhiteSpaceFilter(Stream shrink, Func<string, string> filter)
            {
                _shrink = shrink;
                _filter = filter;
            }
    
    
            public override bool CanRead { get { return true; } }
            public override bool CanSeek { get { return true; } }
            public override bool CanWrite { get { return true; } }
            public override void Flush() { _shrink.Flush(); }
            public override long Length { get { return 0; } }
            public override long Position { get; set; }
            public override int Read(byte[] buffer, int offset, int count)
            {
                return _shrink.Read(buffer, offset, count);
            }
            public override long Seek(long offset, SeekOrigin origin)
            {
                return _shrink.Seek(offset, origin);
            }
            public override void SetLength(long value)
            {
                _shrink.SetLength(value);
            }
            public override void Close()
            {
                _shrink.Close();
            }
    
            public override void Write(byte[] buffer, int offset, int count)
            {
                // capture the data and convert to string
                byte[] data = new byte[count];
                Buffer.BlockCopy(buffer, offset, data, 0, count);
                string s = Encoding.GetEncoding("gb2312").GetString(buffer);
    
                // filter the string
                s = _filter(s);
    
                // write the data to stream
                byte[] outdata = Encoding.GetEncoding("gb2312").GetBytes(s);
                _shrink.Write(outdata, 0, outdata.GetLength(0));
            }
        }
    
        public class WhitespaceFilterAttribute : ActionFilterAttribute
        {
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                var request = filterContext.HttpContext.Request;
                var response = filterContext.HttpContext.Response;
                response.Filter = new WhiteSpaceFilter(response.Filter, s =>
                {
                    s = Regex.Replace(s, @"s+(?=<)|s+$|(?<=>)s+|<!--.+-->|[ ]+//.+
    |/*.+*/|
    ", "");
    
                    //single-line doctype must be preserved
                    var firstEndBracketPosition = s.IndexOf(">");
                    if (firstEndBracketPosition >= 0)
                    {
                        s = s.Remove(firstEndBracketPosition, 1);
                        s = s.Insert(firstEndBracketPosition, ">");
                    }
                    return s;
                });
            }
        }
        /*页面压缩 筛选器 end*/

    在要压缩页面的action上使用。

    [WhitespaceFilter]
    public ActionResult home()
    {
          return View();
    }

    我们可以自行修改替换规则,以达到最优化。

    s = Regex.Replace(s, @"s+(?=<)|s+$|(?<=>)s+|<!--.+-->|[ ]+//.+
    |/*.+*/|
    ", "");
  • 相关阅读:
    头像上传预览
    ajax、PHP、session做购物车
    ajax返回数据类型为JSON数据的处理
    省、市、区(县)三级联动
    ajax做显示信息以后用ajax、Bootstrp做弹窗显示信息详情
    ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库
    Jquery取属性值(复选框、下拉列表、单选按钮)、做全选按钮、JSON存储、去空格
    php练习 租房子
    例子 新闻发布
    注册审核
  • 原文地址:https://www.cnblogs.com/huhangfei/p/5000735.html
Copyright © 2011-2022 走看看