利用ResultFilter实现asp.net mvc 页面静态化
为了提高网站性能、和网站的负载能力,页面静态化是一种有效的方式,这里对于asp.net mvc3 构架下的网站,提供一种个人认为比较好的静态话方式。
实现原理是通过mvc提供的过滤器扩展点实现页面内容的文本保存,直接上代码:
public class StaticFileWriteFilterAttribute : FilterAttribute, IResultFilter
{
public void OnResultExecuted(ResultExecutedContext filterContext)
{
}
public void OnResultExecuting(ResultExecutingContext filterContext)
{
filterContext.HttpContext.Response.Filter = new StaticFileWriteResponseFilterWrapper(filterContext.HttpContext.Response.Filter, filterContext);
}
class StaticFileWriteResponseFilterWrapper : System.IO.Stream
{
private System.IO.Stream inner;
private ControllerContext context;
public StaticFileWriteResponseFilterWrapper(System.IO.Stream s,ControllerContext context)
{
this.inner = s;
this.context = context;
}
public override bool CanRead
{
get { return inner.CanRead; }
}
public override bool CanSeek
{
get { return inner.CanSeek; }
}
public override bool CanWrite
{
get { return inner.CanWrite; }
}
public override void Flush()
{
inner.Flush();
}
public override long Length
{
get { return inner.Length; }
}
public override long Position
{
get
{
return inner.Position;
}
set
{
inner.Position = value;
}
}
public override int Read(byte[] buffer, int offset, int count)
{
return inner.Read(buffer, offset, count);
}
public override long Seek(long offset, System.IO.SeekOrigin origin)
{
return inner.Seek(offset, origin);
}
public override void SetLength(long value)
{
inner.SetLength(value);
}
public override void Write(byte[] buffer, int offset, int count)
{
inner.Write(buffer, offset, count);
try
{
string p = context.HttpContext.Server.MapPath(HttpContext.Current.Request.Path);
if (Path.HasExtension(p))
{
string dir = Path.GetDirectoryName(p);
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
if (File.Exists(p))
{
File.Delete(p);
}
File.AppendAllText(p, System.Text.Encoding.UTF8.GetString(buffer));
}
}
catch
{
}
}
}
}
我们的类StaticFileWriteFilterAttribute实现了IResultFilter,这个接口有两个方法,OnResultExecuted和OnResultExecuting,其中OnResultExecuting是在controller中的action代码执行完毕后,但viewresult执行之前(即页面内容生成之前)执行;OnResultExecuted方法是在viewresult执行之后(即页面内容生成之后)执行。
我们在页面生成之前将StaticFileWriteResponseFilterWrapper类注册给Response对象的Filter属性,这里使用包装类可以在没有副作用的情况下注入页面内容静态化的代码,对于处理业务逻辑的action是透明的。
欢迎转载,转载请保留原链接,如发现版权问题请及时联系我
小尾鱼的池塘:http://www.cnblogs.com/xiaoweiyu/
转载于:https://www.cnblogs.com/ivanyb/p/4214089.html
利用ResultFilter实现asp.net mvc 页面静态化相关推荐
- ASP.NET 权限管理 页面静态化 OA系统培训 三层架构
白菜价, 想要的联系QQ:867635458,非诚勿扰! ASP.NET MVC Linq 技术 企业级通用OA系统 全程开发 大型企业级别OA项目实战全新上线啦!本项目由小孔子讲师全程录制.小孔 ...
- 一步一步asp.net_页面静态化管理
最近事情多,中间还生病了一次,纠结,最近一年来都没有什么毛病,不知道咋了...头痛..... 今天闲下来写篇日志,页面静态化. 页面静态化是我们经常碰到的问题,在web中,要说速度,只有html静态页 ...
- asp.net 页面静态化
页面静态化,有三种方式 伪静态 真静态,折中法 现在我做的是折中发 创建一个asp.net 页面, 连接跳转到还未生成的页面 创建HttpHandle类 using System; using ...
- Asp.Net MVC 页面代码压缩筛选器-自定义删除无效内容
Asp.Net MVC 页面代码压缩筛选器 首先定义以下筛选器,用于代码压缩. /*页面压缩 筛选器*/public class WhiteSpaceFilter : Stream{private S ...
- 页面静态化----------------------------------------个人笔记
***********************************************大型网站提速关键技术(页面静态化,mmecached,mysql优化)****************** ...
- PHP如何实现HTML页面静态化
前言: 随着网站的内容的增多和用户访问量的增多,无可避免的是网站加载会越来越慢,受限于带宽和服务器同一时间的请求次数的限制,我们往往需要在此时对我们的网站进行代码优化和服务器配置的优化. 一般情况下会 ...
- 大型网站架构提速关键技术(页面静态化、memcached、Mysql优化)
大型网站关键技术介绍 1. pv值(page views),访问量大 带来问题 a. 流量大 10000000*2m ->解决方案 买带宽 ,优化程序(处理图片) b. 并发量,同时访问网站的人 ...
- HTML页面静态化技术
随着网站的内容的增多和用户访问量的增多,无可避免的是网站加载会越来越慢,受限于带宽和服务器同一时间的请求次数的限制,我们往往需要在此时对我们的网站进行代码优化和服务器配置的优化. 此文已Django的 ...
- jsp管理系统页面模板_页面静态化如何实现
随着网站的内容的增多和用户访问量的增多,无可避免的是网站加载会越来越慢,受限于带宽和服务器同一时间的请求次数的限制,我们往往需要在此时对我们的网站进行代码优化和服务器配置的优化. 一般情况下会从以下方 ...
最新文章
- 1380 没有上司的舞会
- 拆解交易系统--服务稳定性
- 时隔6年,“三巨头”再度联手,发布万字长文:深度学习将通往何方?
- 输入法项目-用delphi生成GBK 中文编码 表(4~5) GBK/4~5: 0xAA40~0xFEA0(部分) 扩充汉字 包括繁体 0xA840~0xA995(部分) 扩充非汉字...
- kali64位下载怎么是AMD_AMD平台虚拟机安装macOS Sierra方法
- 学习指南_学习指南语文—成于素养,归于方法
- MySql安装错误代码1045的解决方案
- mysql跳脱字符 单引号_MYSQL特殊字符(单引号,行尾斜杠)的处理
- 基于python爬虫的论文标题_Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】...
- 李飞飞力荐:阿里巴巴高可用数据库解决方案
- 项目管理必备文档大全:这14个项目文档你还不会写?
- PageAdmin CMS建站系统的可视化编辑体验
- 萌新,C++、Java、Python 选择哪个好?
- 李玉刚与石头的雨花石
- Nginx反向代理的配置
- 诺贝尔物理学奖揭晓:LED灯将点亮整个21世纪
- 热部署与定时任务冲突问题解决方案
- 今日头条极速版自动脚本_AutoJS4.1.0实战教程 ---今日头条极速版
- 详解诊断数据库ODX-C
- CentOS 已死,代替品 Rocky Linux 获得重生!
热门文章
- android 图片弹跳效果,设置点的弹跳效果
- lisp用entmake生产圆柱体_铝型材挤压生产金属流动与模具分析
- oracle查看本机字符集,查看、修改oracle字符集,查看oracle版本
- dev c++自动补全_Flutter 自动化测试-开篇
- leetcode刷题:三数之和
- unix线程死锁概念与解决
- os x php,OS X 安装php7.0
- python os.path
- javascript Number object
- 18 File Duplication and Pipes