asp.net应用程序html化的一个想法
稍大型的网站都会将asp.net的页面缓存起来,用户访问时首先检查对应的html文件是否存在,不存在时才去生成一次。或干脆只将asp.net作为后台程序,在后台程序生成的整站的html文件,网站只以html的形式提供给浏览者。后者自成系统,效率比前者好,但比前者要复杂多了,并不是我能三语两言能说的;我只想,前者有没有简便一些的asp.net程序html化的方式呢?
为一个asp.net程序添加一个HttpModule,做了一个小尝试
MyHtmlModule.cs很简单,他实现IHttpModule接口
测试基本上证明想法是行得通的。测试项目中的“HTMLPage.aspx”始终没有得到执行的机会,而2个html也如期的出现在IE上。
那么在实际应用时,使用正则表达式获取对应的HTML文件名,检测HTML是否存在,不存在,访问aspx文件并保存其生成的内容。存在当然就好办了,直接RewritePath(html)。
效率自然无法跟asp.net生成的纯html网站比。
为一个asp.net程序添加一个HttpModule,做了一个小尝试
<httpModules>
<add name="MyHtmlModule" type="ModuleLib.MyHtmlModule, ModuleLib" />
</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的命名对应起来就简单了。{
// 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;
}
}
测试基本上证明想法是行得通的。测试项目中的“HTMLPage.aspx”始终没有得到执行的机会,而2个html也如期的出现在IE上。
那么在实际应用时,使用正则表达式获取对应的HTML文件名,检测HTML是否存在,不存在,访问aspx文件并保存其生成的内容。存在当然就好办了,直接RewritePath(html)。
效率自然无法跟asp.net生成的纯html网站比。