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路径保存到数据库中就可以了,其他就没什么了。