======================================================
注:本文源代码点此下载
======================================================
稍大型的网站都会将asp.net的页面缓存起来,用户访问时首先检查对应的html文件是否存在,不存在时才去生成一次。或干脆只将asp.net作为后台程序,在后台程序生成的整站的html文件,网站只以html的形式提供给浏览者。后者自成系统,效率比前者好,但比前者要复杂多了,并不是我能三语两言能说的;我只想,前者有没有简便一些的asp.net程序html化的方式呢?
为一个asp.net程序添加一个httpmodule,做了一个小尝试
httpmodules>
add name="myhtmlmodule" type="modulelib.myhtmlmodule, modulelib" />
httpmodules>
myhtmlmodule.cs很简单,他实现ihttpmodule接口
public void init(httpapplication context)
{
// todo:添加 htmlmodule.init 实现
context.beginrequest+=new eventhandler(context_beginrequest);
}
private void context_beginrequest(object sender, eventargs e)
{
httpapplication application = (httpapplication)sender;
httpcontext context = application.context;
switch(context.request.path)
{
case "/httpmoduletest/htmlpage.aspx?page=1":
context.rewritepath("htmlpage_page_1.htm");
break;
case "/httpmoduletest/htmlpage.aspx?page=2":
context.rewritepath("htmlpage_page_2.htm");
break;
}
}
上面的context_beginrequest方法是很笨的,只是为了测试,实际中用正则表达式把aspxhtml的命名对应起来就简单了。
测试基本上证明想法是行得通的。测试项目中的“htmlpage.aspx”始终没有得到执行的机会,而2个html也如期的出现在ie上。
那么在实际应用时,使用正则表达式获取对应的html文件名,检测html是否存在,不存在,访问aspx文件并保存其生成的内容。存在当然就好办了,直接rewritepath(html)。
效率自然无法跟asp.net生成的纯html网站比。
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/