MVC下壓縮輸入的HTML內容

來源:互聯網
上載者:User

標籤:str   board   ide   space   empty   建立   font   tle   上下   

在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|\n|\t(?=<)");  
  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,就可以了,運行後的網頁原始碼如:


MVC下壓縮輸入的HTML內容

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.