[2007最后一博]Url地址重写,利用HttpHander手工编译页面并按需生成静态HTML文件...


很多朋友可能都讨论过ASP.NET中生成HTML的方法了,有按照模板用IO方法写文件
有在404错误页面内生成HTML的,有在Render内保存页面输出到HTML文件的。
今天我发一个配合Url重写利用HttpHander手工编译.aspx页面方法。
HTML文件的方法,可按需、“定时”的生成,以减轻数据库的访问。

声明:下面的文字是本文不可缺少的部分,转载请保留,谢谢!

作者:武眉博<活靶子.NET>
同时首发于:
    
落伍者   && 博客园  
    
开发者学院   && .Net男孩社区
知识点:UrlRewriteIHttpModuleIHttpHander 的编写
效果:
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

部分代码

C#代码
  1. public void ProcessRequest(HttpContext context)   
  2.         {   
  3.             string rawUrl = context.Request.RawUrl;   
  4.             string requestPath = context.Request.Path;   
  5.             string applicationPath = context.Request.ApplicationPath;   
  6.             Url urlItem = null;   
  7.   
  8.             //上下文中没有定义ToStaticUrlItem表示,此请求没有经过UrlRewrite,直接编译,不生成html   
  9.             //参考UrlRewriteModule.cs   
  10.             if (context.Items["ToStaticUrlItem"] == null)   
  11.             {   
  12.                 if (!File.Exists(context.Request.PhysicalPath))   
  13.                 {   
  14.                     throw new HttpException(404, "您访问的页面没有找到。");   
  15.                 }   
  16.   
  17.                 // asp.net 1.1 采用下面方法编译页面   
  18.                 //PageParser.GetCompiledPageInstance(requestPath, context.Request.PhysicalPath, context).ProcessRequest(context);   
  19.                 IHttpHandler hander = BuildManager.CreateInstanceFromVirtualPath(requestPath, typeof(Page)) as IHttpHandler;   
  20.                 hander.ProcessRequest(context);   
  21.   
  22.                 return;   
  23.             }   
  24.   
  25.             string filePath;   
  26.   
  27.             urlItem = (Url)context.Items["ToStaticUrlItem"];   
  28.   
  29.             Regex regex = new Regex(   
  30.                 Globals.ApplicationPath + urlItem.LookFor,   
  31.                 RegexOptions.CultureInvariant | RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.IgnoreCase);   
  32.   
  33.             string requestFile = regex.Replace(rawUrl, Globals.ApplicationPath + urlItem.WriteTo.Replace("^""&"));   
  34.   
  35.             if (requestFile.IndexOf("?") > 0)   
  36.             {   
  37.                 filePath = requestFile.Substring(0, requestFile.IndexOf("?"));   
  38.             }   
  39.             else  
  40.             {   
  41.                 filePath = requestFile;   
  42.             }   
  43.   
  44.             string inputFile = context.Request.PhysicalApplicationPath + filePath;   
  45.             string path = context.Request.PhysicalApplicationPath + rawUrl.ToLower().Replace(".aspx"".html");   
  46.             if (applicationPath != "/")   
  47.             {   
  48.                 inputFile = inputFile.Replace(applicationPath + "/", @"\");  
  49.                 path = path.Replace(applicationPath + "/", "").Replace("/", @"\");  
  50.             }  
  51.             else  
  52.             {  
  53.                 path = path.Replace("/", @"\");  
  54.             }  
  55.  
  56.             if (!urlItem.EnabledToStatic)  
  57.             {  
  58.                 // asp.net 1.1 采用下面方法编译页面  
  59.                 //PageParser.GetCompiledPageInstance( filePath , inputFile , context ).ProcessRequest( context );  
  60.                 IHttpHandler hander = BuildManager.CreateInstanceFromVirtualPath(filePath, typeof(Page)) as IHttpHandler;  
  61.                 hander.ProcessRequest(context);  
  62.  
  63.                 return;  
  64.             }  
  65.  
  66.             if (!File.Exists(path))  
  67.             {  
  68.                 // asp.net 1.1 采用下面方法编译页面  
  69.                 //PageParser.GetCompiledPageInstance( filePath , inputFile , context ).ProcessRequest( context );  
  70.                 IHttpHandler hander = BuildManager.CreateInstanceFromVirtualPath(filePath, typeof(Page)) as IHttpHandler;  
  71.                 hander.ProcessRequest(context);  
  72.                 context.Response.Filter = new AspxBoy.BuildHtmlDemo.ToHtmlFilter(context.Response.Filter, path);  
  73.  
  74.                 return;  
  75.             }  
  76.  
  77.             if (urlItem.Minutes == Int32.MaxValue)  
  78.             {  
  79.                 context.Server.Transfer(rawUrl.ToLower().Replace(".aspx", ".html"));  
  80.             }  
  81.             else  
  82.             {  
  83.                 FileInfo fileInfo = new FileInfo(path);  
  84.                 if (fileInfo.LastWriteTime.AddMinutes((double)urlItem.Minutes) < DateTime.Now)  
  85.                 {  
  86.                     fileInfo.Delete();  
  87.  
  88.                     // asp.net 1.1 采用下面方法编译页面  
  89.                     //PageParser.GetCompiledPageInstance( filePath , inputFile , context ).ProcessRequest( context );  
  90.                     IHttpHandler hander = BuildManager.CreateInstanceFromVirtualPath(filePath, typeof(Page)) as IHttpHandler;  
  91.                     hander.ProcessRequest(context);  
  92.                     context.Response.Filter = new AspxBoy.BuildHtmlDemo.ToHtmlFilter(context.Response.Filter, path);  
  93.                 }  
  94.                 else  
  95.                 {  
  96.                     context.Server.Transfer(rawUrl.ToLower().Replace(".aspx", ".html"));   
  97.                 }   
  98.                 return;   
  99.             }   
  100.         }  

示例项目下载:http://files.cnblogs.com/huobazi/BuildHtmlDemo.rar

转载于:https://www.cnblogs.com/huobazi/archive/2007/12/31/UrlRewriteAndHttpHanderAndMakeStaticHtmlFiles.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

found.000文件夹的问题

found.000文件夹的问题问&#xff1a;我的电脑有的时候在C盘或D盘的根目录下有个名为found.000的文件夹&#xff0c;里面有一些后缀名为CHK的文件。在c:windows下有很多以fff开头的怪文件&#xff0c;而且大小全部为0字节。请问这些是什么文件&#xff1f;能否将它们删除&#…

bytecode java_Java 字节码解读

一、源代码public classPeople {privateString name;private intage;}二、利用Javap 反编译查看字节码结构信息javap -v People.class结果如下Classfile /D:/work/byte-code/src/People.classLast modified2020-12-9; size 240bytesMD5 checksum 54b8c1ad94a9c9cf5074fd8520454…

他狂骗五千万美元消失17年...却被一个纪录片导演锲而不舍的追到了镜头前!...

全世界只有3.14 % 的人关注了青少年数学之旅他&#xff0c;曾经是个做啥都无师自通的天才。他&#xff0c;在众多的行业里&#xff0c;莫名进入到了艺术品行业&#xff0c;没过多久&#xff0c;他靠着惊人的自学能力&#xff0c;成了艺术圈里所有人津津乐道的画商。他&#xff…

使用JDBC驱动程序访问SQL Server 2000数据库(实例)

<!-- 使用JDBC驱动程序访问SQL Server 2000数据库 --><%String drivername"com.microsoft.jdbc.sqlserver.SQLServerDriver";//sql server 2000for jdbc 驱动程序名称String url"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName学籍管理"…

DotNetMagic 5.4.0破解

就不做多介绍&#xff0c;具体看我以前的文章&#xff0c;请勿用于商业用途&#xff0c;破解仅仅为学习研究之用&#xff0c;本人对此不承担任何法律责任&#xff0c;谢谢配合&#xff01;下载转载于:https://www.cnblogs.com/anqincmt/archive/2007/12/31/1021756.html

合肥.NET俱乐部第二期技术沙龙活动预告

各位亲爱的.NET从业和爱好者们&#xff1a; 大家好&#xff0c;自从19年举办.NET俱乐部第一期技术沙龙后&#xff0c;.NET在开源以及跨平台的加持下继续飞速发展&#xff0c;各种开源项目不断涌现&#xff0c;各种社区活动持续开展&#xff0c;.NET的生态逐步丰富&#xff0…

你见过扇贝游泳吗? | 今日趣图

全世界只有3.14 % 的人关注了青少年数学之旅正常颈椎VS颈椎病患者的颈椎丁香医生小学入学测试题你知道答案吗&#xff1f;图源网络为什么我的假期这么短&#xff1f;文丁香医生五子棋必胜秘籍图源网络那些女生称呼的真相图沙县小吃你有见过扇贝游泳吗小迷妹神吐槽

Regulator的下载地址

都说Regulator“是一种很有特色的工具&#xff0c;能够使生成和测试正则表达式变得很容易”&#xff0c;想从网上下载试一下&#xff0c;不料全是清一色的 http://royo.is-a-geek.com/regulator &#xff08;不要试了&#xff0c;打不开的&#xff09;&#xff0c;转贴人真是不…

java抓取新闻_【图片】【抓取】Java获取各大网站新闻【java吧】_百度贴吧

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼下面上源码&#xff0c;用一小时做的&#xff0c;还有些bugpackage Getnews;import java.io.*;import java.net.*;import com.itextpdf.text.List;public class GetNews {/*technology**** */static URL urlnull;staticInputStream…

c#結合正則表達式驗證輸入的字符串

using System.Text.RegularExpressions; #region 驗證輸入的字符串 /// <summary> /// 判斷輸入的字符類型  /// </summary> /// <param name"_value">輸入的字串</param> /// <param name"_kind">要驗…

实名羡慕,国内这些厂.NET薪资高的吓人!

小米招C#工程师&#xff0c;要求WPF自动化设备&#xff0c;20~40k * 14薪&#xff1b;小鹏招WPF/.NET/PLC&#xff0c;25~40k年终&#xff1b;特斯拉招自动化控制16~25k * 15薪&#xff0c;华为应届硕士C#运动控制&#xff0c;就已经17~25k *14薪了。这些招聘让人眼热&#xff…

修车工在生命最后,才知道自己的儿子是如今世界首富!

全世界只有3.14 % 的人关注了青少年数学之旅在美国亚利桑那州凤凰城&#xff0c;曾经住着一个叫Ted Jorgensen的自行车修理工&#xff0c;他开了一家自行车店&#xff0c;平时默默的卖车修车&#xff0c;日子过的平平淡淡。在凤凰城郊区&#xff0c;他和二婚妻子住在这么一间不…

没有情人的情人节

我想和她一生一世。神却说&#xff1a;你只能爱她七天&#xff0c;我说&#xff1a;星期一到星期天。神&#xff1a;只四天呢&#xff1f;我&#xff1a;春天夏天秋天冬天。神&#xff1a;只三天呢? 我&#xff1a;今天明天后天。神&#xff1a;只两天&#xff1f;我&#xff…

Sublime Text 2 中运行 PHP

2019独角兽企业重金招聘Python工程师标准>>> Sublime Text 2 has the concept of build systems. This basically means that if you are editing a Python file then you can run the Python interpreter on the source file your are editing and see the output …

理解 Delphi 的类(七) - 认识类的多态

什么是多态? 我的理解就是: 同样一个方法, 在不同的对象里会有不同的实现, 仅此而已.unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm1 class(TForm)Button1: TButton;Button2: TButton;Bu…

python退出帮助系统help应该使用exit_python--help - tesion

python help学习python的过程中&#xff0c;难免遇到一些生疏的东西&#xff0c;为此需要参看相关的文档说明。Linux下众所周知有man可以查找系统的命令帮助页&#xff1b;对于python也提供了自己的帮助文档的2种方式&#xff1a;方式一&#xff1a;启动python解释器&#xff0…

试用GitHub Copilot一周后,我给你的建议是:不要使用它

如果你还不知道“GitHub Copilot”&#xff0c;它是GitHub推出“AI程序员”插件&#xff0c;可以根据你在VS Code输入的部分代码或注释&#xff0c;自动生成完整的代码。在我上次的文章中&#xff0c;演示了GitHub Copilot是如何工作的。刚开始&#xff0c;我对能够试用GitHub …

你知道长颈鹿是怎么睡觉的吗? | 今日趣图

全世界只有3.14 % 的人关注了青少年数学之旅一图教你打太极拳其实指甲也是一味药材你知道长颈鹿是怎么睡觉的吗&#xff1f;健身和肥宅的区别Win10的内置桌面并不是P的而是搭实景拍出来的当你玩游戏的时候...这才是第一个用蚂蚁花“被”...呗的人一般人的身高和他的臂展差不多一…

华仔andylau

好久没关注华仔&#xff0c;今天到华仔天地会逛下&#xff0c;转几张图片

ubuntu下搭建java web开发环境的详细步骤

系统环境&#xff1a;Ubuntu 10.10&#xff08;linux-kernel 2.6.35-22&#xff09;安装版本&#xff1a;apache-tomcat-7.0.29.tar.gz&#xff08;官方网址&#xff1a;Apache Tomcat&#xff09;安装步骤&#xff1a;1、下载 Tomcat下载 apache-tomcat-7.0.29.tar.gz&#xf…