asp.net应用程序html化的一个想法

稍大型的网站都会将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方法是很笨的,只是为了测试,实际中用正则表达式把aspx<=>html的命名对应起来就简单了。

测试基本上证明想法是行得通的。测试项目中的“HTMLPage.aspx”始终没有得到执行的机会,而2个html也如期的出现在IE上。

那么在实际应用时,使用正则表达式获取对应的HTML文件名,检测HTML是否存在,不存在,访问aspx文件并保存其生成的内容。存在当然就好办了,直接RewritePath(html)。

效率自然无法跟asp.net生成的纯html网站比。
posted @ 2006-03-20 14:58  生命体验之kevin-Y  阅读(297)  评论(0编辑  收藏  举报