MVC下压缩输入的HTML内容
在MVC下如何压缩输出的HTML代码,替换HTML代码中的空白,换行符等字符?
1.首先要了解MVC是如何输出HTML代码到客户端的,先了解下Controller这个类,里面有很多方法,我们需要的主要有两个:OnActionExecuting和OnResultExecuted
2.新建一个基类,继承自:System.Web.Mvc.Controller,代码如下:
- using System.IO;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Web;
- using System.Web.Mvc;
- using System.Web.UI;
- namespace WebApplication2.Controllers
- {
- /// <summary>
- /// Base
- /// </summary>
- public class BaseController : Controller
- {
- #region Private
- /// <summary>
- /// HtmlTextWriter
- /// </summary>
- private HtmlTextWriter tw;
- /// <summary>
- /// StringWriter
- /// </summary>
- private StringWriter sw;
- /// <summary>
- /// StringBuilder
- /// </summary>
- private StringBuilder sb;
- /// <summary>
- /// HttpWriter
- /// </summary>
- private HttpWriter output;
- #endregion
- /// <summary>
- /// 压缩html代码
- /// </summary>
- /// <param name="text">html代码</param>
- /// <returns></returns>
- private static string Compress(string text)
- {
- Regex reg = new Regex(@"\s*(</?[^\s/>]+[^>]*>)\s+(</?[^\s/>]+[^>]*>)\s*");
- text = reg.Replace(text, m => m.Groups[1].Value + m.Groups[2].Value);
- reg = new Regex(@"(?<=>)\s|\n|\t(?=<)");
- text = reg.Replace(text, string.Empty);
- return text;
- }
- /// <summary>
- /// 在执行Action的时候,就把需要的Writer存起来
- /// </summary>
- /// <param name="filterContext">上下文</param>
- protected override void OnActionExecuting(ActionExecutingContext filterContext)
- {
- sb = new StringBuilder();
- sw = new StringWriter(sb);
- tw = new HtmlTextWriter(sw);
- output = (HttpWriter)filterContext.RequestContext.HttpContext.Response.Output;
- filterContext.RequestContext.HttpContext.Response.Output = tw;
- base.OnActionExecuting(filterContext);
- }
- /// <summary>
- /// 在执行完成后,处理得到的HTML,并将他输出到前台
- /// </summary>
- /// <param name="filterContext"></param>
- protected override void OnResultExecuted(ResultExecutedContext filterContext)
- {
- string response = Compress(sb.ToString());
- output.Write(response);
- }
- }
- }

2.需要压缩的页面控制器,集成这个BaseController,就可以了,运行后的网页源代码如下图:
MVC下压缩输入的HTML内容的更多相关文章
- ASP.NET MVC下的四种验证编程方式[续篇]
在<ASP.NET MVC下的四种验证编程方式>一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式("手工验证"."标注Validation ...
- ASP.NET MVC下的四种验证编程方式
ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效性,我们将针对参数的验证成为Model绑定 ...
- 在ASP.NET MVC下通过短信验证码注册
以前发短信使用过短信猫,现在,更多地是使用第三方API.大致过程是: → 用户在页面输入手机号码→ 用户点击"获取验证码"按钮,把手机号码发送给服务端,服务端产生几位数的随机码,并 ...
- 《高可用MySQL》1 – Windows环境下压缩版MySQL安装
近日在读O’REILIY系列的<高可用MySQL>, 自然少不了主从(Master-Slave)配置和横向扩展相关的内容.Master-Slave这东西吧,在许多公司都是标配,开发中基本天 ...
- linux下压缩与解压(zip、unzip、tar)详解
linux下压缩与解压(zip.unzip.tar)详解 2012-05-09 13:58:39| 分类: linux | 标签:linux zip unzip tar linux命令详解 |举报|字 ...
- ASP.NET MVC下的四种验证编程方式[续篇]【转】
在<ASP.NET MVC下的四种验证编程方式> 一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式(“手工验证”.“标注ValidationAttribute特性”.“ ...
- ASP.NET MVC下的四种验证编程方式【转】
ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效 性,我们将针对参数的验证成为Model绑 ...
- 转:MVC 下导航超链接本页面高亮的一种解决方案
前言 导航高亮一直是一个让大家头疼的问题. 纯 Javascript 的话可以判断当前页面的地址和链接地址是否有关系. 这样的弊端就是自由度太低,MVC 下会出一定的问题 (MVC 下有默认的 Con ...
- MVC下用户登录状态校验的问题以及解决方案--------------Action全局过滤器的使用
前言当我们访问某个网站的时候需要检测用户是否已经登录(通过Session是否为null),我们知道在WebForm中可以定义一个BasePage类让他继承System.Web.UI.Page,重写它的 ...
随机推荐
- Spring cookie 实战
测试环境搭建 使用Springboot构建web server, 在测试方法中打印接收的cookie. @RestController @RequestMapping("/register/ ...
- 如何在 TFS 中使用 Git
对 Charley Blog 的代码进行版本控制的想法由来已久,在代码建立之初其实已经使用过 TFS 进行控制,只是后期没能好好用起来,加之后来系统环境的变化导致TFS连接丢失,便算是正式放弃了版本控 ...
- ABP框架 - 验证数据传输对象
文档目录 本节内容: 简介 使用数据注解 自定义验证 禁用验证 正常化 简介 一个应用的输入应当先要验证,这个输入可能来自用户或另一个应用,在一个web应用里,验证通常实现两次:在客户端和在服务端,客 ...
- PL/SQL快速选中一行并执行
首先确认光标必须处在该行的位置 按下End键位 其次按下shift+home 最后按下F8执行
- Atitit 图像处理的心得与疑惑 attilax总结
Atitit 图像处理的心得与疑惑 attilax总结 1.1. 使用类库好不好??还是自己实现算法1 1.2. 但是,如果遇到类库体积太大,后者没有合适的算法,那就只能自己开发算法了1 1.3. 如 ...
- vue源码解析阅读列表
https://zhuanlan.zhihu.com/p/24435564 开发vue(或类似的MVVM框架)的过程中,需要面对的主要问题有哪些? 剖析vue实现原理,自己动手实现mvvm 官网介绍
- 堆排序与优先队列——算法导论(7)
1. 预备知识 (1) 基本概念 如图,(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树.树中的每一个结点对应数组中的一个元素.除了最底层外,该树是完全充满的,而且从左向右填充.堆的数组 ...
- c 数组与指针的使用注意事项
数组变量和指针变量有一点小小的区别 所以把数组指针赋值给指针变量的时候千万要小心 加入把数组赋值给指针变量,指针变量只会包含数组的地址信息 而对数组的长度一无所知 相当于指针丢失了一部分信息,我们把这 ...
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)
RAC 工作原理和相关组件(三) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...
- 想着模仿京东微信首页呢,banner滚动搞定了,写到了一半了
接着上篇 微信小程序-阅读小程序demo写:http://www.cnblogs.com/muyixiaoguang/p/5917986.html 想着模仿京东首页呢,结果也没赶得及写完,轮播图让我搞 ...