ASP.NET 静态化小记
最近看了些静态化的文章,比如真静态,伪静态的各种方法。但是比较有用的文章都比较分散,而且知识点讲述的也不一样,对于像我这种重操作的开发者来说,理论过多反而看的烦,最重要的是会做,才是真理。所有理论的东西我就不会讲述太多了,真的要看各种静态化的原理,推介去买相关的本书好好研究。
我总结了下我所知道的静态化的技术,比如使用组件Urlrewrite,比如自己重写httpHandler里的方法等等。。。。
第一种方法:先去下载个urlrewrite组件吧,解压包,把rewrite.dll引进项目,首先你在web.config里写入
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
<httpModules>
<add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" />
</httpModules>
然后呢,你就要配置你的重写规则了下面是我以前项目里的一些规则配置,参考下,不一定适合你。
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/shwInfo/Jurisdiction_(\w{3})\.aspx</LookFor>
<SendTo>~/En/Jurisdiction.aspx?jurid=$1</SendTo>
</RewriterRule> <RewriterRule>
<LookFor>~/articles/(\d{1,})\.htm</LookFor> <!-- 这个是被代替后的文件名,使用到正则表达式 -->
<SendTo><![CDATA[~/En/article_view.aspx?article_id=$1]]></SendTo> <!-- 这个是要给代替的网页,一般是带有问号后面带参数的网页 -->
</RewriterRule>
<RewriterRule>
<LookFor>~/articles/(\d{1,})_(\d{1,})\.htms</LookFor>
<SendTo><![CDATA[~/En/article_view.aspx?article_id=$1&page=$2]]></SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
不如我的一个页面路径是http://localhost/En/article_view.aspx?article_id=2那么就会被http://localhost/En/article/1.htm代替了。
做完这些呢,你还需要配置下你的iis把aspx页面的可执行文件路径改为html,并且把s检查文件是否存在的勾去掉就可以
第二种方法是真静态方法,是重写模板页的,代码写出来就参考下吧
显示页面write.aspx主要代码
<body style="width:500px; text-align:center;">
<form id="form1" runat="server">
<div>
<table width="750px">
<tr>
<td colspan="4">文章信息</td>
</tr>
<tr>
<td style="width:100px;">标题</td>
<td style="text-align: left"><asp:TextBox ID="name"
runat="server"></asp:TextBox></td>
</tr>
<tr>
<td style=" width:100px; height: 191px;">内容</td>
<td style="height: 191px"><asp:TextBox ID="Msg" TextMode="multiline"
Columns="50" runat="server" Rows="10" Height="182px"
Width="631px"></asp:TextBox></td>
</tr>
<tr>
<td colspan="4">
<asp:Button ID="btn" runat="server" Text="添加"
OnClick="btn_Click" style="width: 40px" /></td>
</tr>
</table>
</div>
</form>
</body>
然后是write.aspx.cs代码
protected void btn_Click(object sender, EventArgs e)
{
string title = this.name.Text;
string content = this.Msg.Text;
content = content.Replace("\n", "<br />");
string Time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
string FileName = DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss")
+ ".htm";
OutputHtml(title, content, Time, FileName, "HtmlTemp.htm");
}
private void OutputHtml(string t1, string t2, string t3, string FName,string tempHtml)
{
string HtmlPath = String.Format(@"\Html\{0}", FName);
string HtmlTemp = File.ReadAllText(Server.MapPath(".") +
@"\" + tempHtml, Encoding.UTF8);
StringBuilder SBuilder = new StringBuilder(HtmlTemp);
SBuilder.Replace("{AddTiTle}", t1);
SBuilder.Replace("{AddContent}", t2);
SBuilder.Replace("{AddTime}", t3);
StreamWriter SWriter = File.CreateText(Server.MapPath(".") +
@"\Html\" + FName);
SWriter.WriteLine(SBuilder.ToString());
SWriter.Flush();
SWriter.Close();
Response.Redirect(HtmlPath);
}
下面是模板页HtmlTemp.htm
<body style="text-align:center;">
<table cellpadding="5" cellspacing="0" width="750px" border="2"> <!--此页面
用于网页静态化的模板,显示添加的信息-->
<tr>
<td align="center">{AddTiTle}</td>
</tr>
<tr>
<td align="left">{AddContent}</td>
</tr>
<tr>
<td align="right">
发表时间:{AddTime}
</td>
</tr>
</table>
</body>
这样就可以了,如果需要用你可以优化一下,把生成的html路径保存到数据库中就可以了,其他就没什么了。
浙公网安备 33010602011771号