MVC下压缩输入的HTML内容

在MVC下如何压缩输出的HTML代码,替换HTML代码中的空白,换行符等字符?

1.首先要了解MVC是如何输出HTML代码到客户端的,先了解下Controller这个类,里面有很多方法,我们需要的主要有两个:OnActionExecuting和OnResultExecuted

2.新建一个基类,继承自:System.Web.Mvc.Controller,代码如下:

[csharp] view plain copy
 
  1. using System.IO;  
  2. using System.Text;  
  3. using System.Text.RegularExpressions;  
  4. using System.Web;  
  5. using System.Web.Mvc;  
  6. using System.Web.UI;  
  7.   
  8. namespace WebApplication2.Controllers  
  9. {  
  10.     /// <summary>  
  11.     /// Base  
  12.     /// </summary>  
  13.     public class BaseController : Controller  
  14.     {  
  15.         #region Private  
  16.   
  17.         /// <summary>  
  18.         /// HtmlTextWriter  
  19.         /// </summary>  
  20.         private HtmlTextWriter tw;  
  21.         /// <summary>  
  22.         /// StringWriter  
  23.         /// </summary>  
  24.         private StringWriter sw;  
  25.         /// <summary>  
  26.         /// StringBuilder  
  27.         /// </summary>  
  28.         private StringBuilder sb;  
  29.         /// <summary>  
  30.         /// HttpWriter  
  31.         /// </summary>  
  32.         private HttpWriter output;  
  33.  
  34.         #endregion  
  35.   
  36.         /// <summary>  
  37.         /// 压缩html代码  
  38.         /// </summary>  
  39.         /// <param name="text">html代码</param>  
  40.         /// <returns></returns>  
  41.         private static string Compress(string text)  
  42.         {  
  43.             Regex reg = new Regex(@"s*(</?[^s/>]+[^>]*>)s+(</?[^s/>]+[^>]*>)s*");  
  44.             text = reg.Replace(text, m => m.Groups[1].Value + m.Groups[2].Value);  
  45.   
  46.             reg = new Regex(@"(?<=>)s| | (?=<)");  
  47.             text = reg.Replace(text, string.Empty);  
  48.   
  49.             return text;  
  50.         }  
  51.   
  52.         /// <summary>  
  53.         /// 在执行Action的时候,就把需要的Writer存起来  
  54.         /// </summary>  
  55.         /// <param name="filterContext">上下文</param>  
  56.         protected override void OnActionExecuting(ActionExecutingContext filterContext)  
  57.         {  
  58.             sb = new StringBuilder();  
  59.             sw = new StringWriter(sb);  
  60.             tw = new HtmlTextWriter(sw);  
  61.             output = (HttpWriter)filterContext.RequestContext.HttpContext.Response.Output;  
  62.             filterContext.RequestContext.HttpContext.Response.Output = tw;  
  63.   
  64.             base.OnActionExecuting(filterContext);  
  65.         }  
  66.   
  67.         /// <summary>  
  68.         /// 在执行完成后,处理得到的HTML,并将他输出到前台  
  69.         /// </summary>  
  70.         /// <param name="filterContext"></param>  
  71.         protected override void OnResultExecuted(ResultExecutedContext filterContext)  
  72.         {  
  73.             string response = Compress(sb.ToString());  
  74.   
  75.             output.Write(response);  
  76.         }  
  77.     }  
  78. }  

2.需要压缩的页面控制器,集成这个BaseController,就可以了,运行后的网页源代码如下图:


原文地址:https://www.cnblogs.com/zcm123/p/6992045.html