Url地址重写,利用HttpHander手工编译页面并按需生成静态HTML文件
来源:互联网 发布:sys socket.h windows 编辑:程序博客网 时间:2024/04/29 06:43
很多朋友可能都讨论过ASP.NET中生成HTML的方法了,有按照模板用IO方法写文件
有在404错误页面内生成HTML的,有在Render内保存页面输出到HTML文件的。
今天我发一个配合Url重写利用HttpHander手工编译.aspx页面方法。
HTML文件的方法,可按需、“定时”的生成,以减轻数据库的访问。
声明:下面的文字是本文不可缺少的部分,转载请保留,谢谢!
////////////////////////////////////////////////////
作者:武眉博<活靶子.NET>
同时首发于:
落伍者 && 博客园
开发者学院 && .Net男孩社区
知识点:UrlRewrite、 IHttpModule、 IHttpHander 的编写
效果:
http://www.devedu.com/Doc/DotNet/AspNet/default.2.aspx
http://www.devedu.com/Doc/DotNet/AspNet/default.2.html
思路:
1 挂载“.aspx"的请求到自定义的Httphander内
2 配置URL重写规则
3 访问某.aspx文件时,在HttpHander内 根据配置确定是否应该生成
接着...
if(需要生成)
{
if(若已经生成html文件 )
{
if(文件并未过期)
{
则直接定向(Server.Transfer())。
}
else
{
删除HTML文件;
重新编译.aspx(Page内数据库操作等等)
生成HTML文件;
}
}
else if(尚未生成文件)
{
生成Html。
}
}
else
{
则编译.aspx文件
}
另:建议阅读一下dudu的blog中关于asp.net页面编译的讨论
http://www.cnblogs.com/dudu/archive/2006/03/07/345107.html
http://www.cnblogs.com/dudu/archive/2006/03/07/344351.html
部分代码
- public void ProcessRequest(HttpContext context)
- {
- string rawUrl = context.Request.RawUrl;
- string requestPath = context.Request.Path;
- string applicationPath = context.Request.ApplicationPath;
- Url urlItem = null;
- //上下文中没有定义ToStaticUrlItem表示,此请求没有经过UrlRewrite,直接编译,不生成html
- //参考UrlRewriteModule.cs
- if (context.Items["ToStaticUrlItem"] == null)
- {
- if (!File.Exists(context.Request.PhysicalPath))
- {
- throw new HttpException(404, "您访问的页面没有找到。");
- }
- // asp.net 1.1 采用下面方法编译页面
- //PageParser.GetCompiledPageInstance(requestPath, context.Request.PhysicalPath, context).ProcessRequest(context);
- IHttpHandler hander = BuildManager.CreateInstanceFromVirtualPath(requestPath, typeof(Page)) as IHttpHandler;
- hander.ProcessRequest(context);
- return;
- }
- string filePath;
- urlItem = (Url)context.Items["ToStaticUrlItem"];
- Regex regex = new Regex(
- Globals.ApplicationPath + urlItem.LookFor,
- RegexOptions.CultureInvariant | RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.IgnoreCase);
- string requestFile = regex.Replace(rawUrl, Globals.ApplicationPath + urlItem.WriteTo.Replace("^", "&"));
- if (requestFile.IndexOf("?") > 0)
- {
- filePath = requestFile.Substring(0, requestFile.IndexOf("?"));
- }
- else
- {
- filePath = requestFile;
- }
- string inputFile = context.Request.PhysicalApplicationPath + filePath;
- string path = context.Request.PhysicalApplicationPath + rawUrl.ToLower().Replace(".aspx", ".html");
- if (applicationPath != "/")
- {
- inputFile = inputFile.Replace(applicationPath + "/", @"/");
- path = path.Replace(applicationPath + "/", "").Replace("/", @"/");
- }
- else
- {
- path = path.Replace("/", @"/");
- }
- if (!urlItem.EnabledToStatic)
- {
- // asp.net 1.1 采用下面方法编译页面
- //PageParser.GetCompiledPageInstance( filePath , inputFile , context ).ProcessRequest( context );
- IHttpHandler hander = BuildManager.CreateInstanceFromVirtualPath(filePath, typeof(Page)) as IHttpHandler;
- hander.ProcessRequest(context);
- return;
- }
- if (!File.Exists(path))
- {
- // asp.net 1.1 采用下面方法编译页面
- //PageParser.GetCompiledPageInstance( filePath , inputFile , context ).ProcessRequest( context );
- IHttpHandler hander = BuildManager.CreateInstanceFromVirtualPath(filePath, typeof(Page)) as IHttpHandler;
- hander.ProcessRequest(context);
- context.Response.Filter = new AspxBoy.BuildHtmlDemo.ToHtmlFilter(context.Response.Filter, path);
- return;
- }
- if (urlItem.Minutes == Int32.MaxValue)
- {
- context.Server.Transfer(rawUrl.ToLower().Replace(".aspx", ".html"));
- }
- else
- {
- FileInfo fileInfo = new FileInfo(path);
- if (fileInfo.LastWriteTime.AddMinutes((double)urlItem.Minutes) < DateTime.Now)
- {
- fileInfo.Delete();
- // asp.net 1.1 采用下面方法编译页面
- //PageParser.GetCompiledPageInstance( filePath , inputFile , context ).ProcessRequest( context );
- IHttpHandler hander = BuildManager.CreateInstanceFromVirtualPath(filePath, typeof(Page)) as IHttpHandler;
- hander.ProcessRequest(context);
- context.Response.Filter = new AspxBoy.BuildHtmlDemo.ToHtmlFilter(context.Response.Filter, path);
- }
- else
- {
- context.Server.Transfer(rawUrl.ToLower().Replace(".aspx", ".html"));
- }
- return;
- }
- }
示例项目下载:http://www.cnblogs.com/Files/huobazi/BuildHtmlDemo.rar
- Url地址重写,利用HttpHander手工编译页面并按需生成静态HTML文件
- Url地址重写,利用HttpHander手工编译页面并按需生成静态HTML文件
- Url地址重写,利用HttpHander手工编译页面并按需生成静态HTML文件
- Url地址重写,利用HttpHander手工编译页面并按需生成静态HTML文件
- Url地址重写,利用HttpHander手工编译页面并按需生成静态HTML文件
- Url地址重写,利用HttpHander手工编译页面并按需生成静态HTML文件
- Url地址重写HttpHander生成静态HTML文件 FckEditor,远程图片下载,插件
- 利用 apache 的 rewrite 功能生成静态页面URL地址
- url重写与静态页面生成
- 利用页面输出生成HTML静态页面
- 利用URLRewriter重写url地址-实现伪静态
- 利用Freemarker生成html静态页面,也可利用模版功能生成不同格式的文件
- 页面静态化处理-必须利用URL重写规则
- 按url生成静态页面
- 【转帖】利用Java生成静态HTML页面
- 利用Java生成静态HTML页面
- 利用freemarker、java生成html静态页面
- 通过页面的url地址生成静态页面
- On Inferring and Characterizing Internet Routing Policies
- 回顾过去,展望“钱”景——2007年软件开发者薪资调查报告
- 40种网站设计常用技巧
- 改善用户体验之alert提示效果
- 常用页面代码html
- Url地址重写,利用HttpHander手工编译页面并按需生成静态HTML文件
- ToString()格式和用法大全
- INTERNET编程之ISO/OSI和TCP/IP模型续
- nutch和lucene的区别
- 优秀课件笔记之中国园林艺术讲稿
- 对话AJAX框架双杰
- 乱弹之性能调优,程序设计和技术管理
- 发一个以前写的sql2000的分页存储过程。。
- Web 2.0 到 web 4.0 :未来的语义网络和网络操作系统(WebOS)