mvc中压缩html

 1  public class WhiteSpaceFilter : Stream
 2     {
 3         private Stream _shrink;
 4         private Func<string, string> _filter;
 5 
 6         public WhiteSpaceFilter(Stream shrink, Func<string, string> filter)
 7         {
 8             _shrink = shrink;
 9             _filter = filter;
10         }
11 
12 
13         public override bool CanRead { get { return true; } }
14         public override bool CanSeek { get { return true; } }
15         public override bool CanWrite { get { return true; } }
16         public override void Flush() { _shrink.Flush(); }
17         public override long Length { get { return 0; } }
18         public override long Position { get; set; }
19         public override int Read(byte[] buffer, int offset, int count)
20         {
21             return _shrink.Read(buffer, offset, count);
22         }
23         public override long Seek(long offset, SeekOrigin origin)
24         {
25             return _shrink.Seek(offset, origin);
26         }
27         public override void SetLength(long value)
28         {
29             _shrink.SetLength(value);
30         }
31         public override void Close()
32         {
33             _shrink.Close();
34         }
35 
36         public override void Write(byte[] buffer, int offset, int count)
37         {
38             // capture the data and convert to string
39             byte[] data = new byte[count];
40             Buffer.BlockCopy(buffer, offset, data, 0, count);
41             string s = Encoding.UTF8.GetString(buffer);
42 
43             // filter the string
44             s = _filter(s);
45 
46             // write the data to stream
47             byte[] outdata = Encoding.UTF8.GetBytes(s);
48             _shrink.Write(outdata, 0, outdata.GetLength(0));
49         }
50     }
51     /// <summary>
52     /// 压缩html
53     /// </summary>
54     public class WhitespaceFilterAttribute : ActionFilterAttribute
55     {
56         public override void OnActionExecuting(ActionExecutingContext filterContext)
57         {
58             var request = filterContext.HttpContext.Request;
59             var response = filterContext.HttpContext.Response;
60             response.Filter = new WhiteSpaceFilter(response.Filter, s =>
61             {
62                 s = Regex.Replace(s, @"\s+(?=<)|\s+$|(?<=>)\s+", "");
63 
64                 //single-line doctype must be preserved
65                 var firstEndBracketPosition = s.IndexOf(">");
66                 if (firstEndBracketPosition >= 0)
67                 {
68                     s = s.Remove(firstEndBracketPosition, 1);
69                     s = s.Insert(firstEndBracketPosition, ">");
70                 }
71                 return s;
72             });
73         }
74     }

写一个basecontrol 当做属性来用

 

posted @ 2013-06-09 18:07  Ganler1988  阅读(361)  评论(0编辑  收藏  举报