MVC Minify Html
| Nisan 11, 20171 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | public class BaseController : Controller { 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.Default.GetString(buffer); // filter the string s = _filter(s); // write the data to stream byte[] outdata = Encoding.Default.GetBytes(s); _shrink.Write(outdata, 0, outdata.GetLength(0)); } } protected override void OnActionExecuting(ActionExecutingContext Context) { var request = Context.HttpContext.Request; var response = Context.HttpContext.Response; response.Filter = new WhiteSpaceFilter(response.Filter, s => { s = Regex.Replace(s, @"\s+", " "); s = Regex.Replace(s, @"\s*\n\s*", "\n"); s = Regex.Replace(s, @"\s*\>\s*\<\s*", "><"); s = Regex.Replace(s, @"<!--(.*?)-->", ""); //Remove comments // single-line doctype must be preserved var firstEndBracketPosition = s.IndexOf(">"); if (firstEndBracketPosition >= 0) { s = s.Remove(firstEndBracketPosition, 1); s = s.Insert(firstEndBracketPosition, ">"); } return s; }); } } |
1 2 3 4 5 6 7 | public class PageBuilderController : BaseController { public ActionResult Index() { } } |