首先声明下,我这部分东西都不是什么高难度的,也没多深,只是把我在项目中经常需要用到,在实际使用中比较可行的一些方法,与部分需要这部分知识的人进行分享。
关于伪静态,有很多文章了,但是大部分文章我发觉都只说了半截,而这半截是最简单的,无外乎就是一个配置。也就是URLRewriter.dll。就这部分,我就不狗尾继貂了。在生成伪静态的时候,我们不光要把用户输入的静态网址跳转到动态的页面,我们还需要把系统中的动态链接改为静态的。
首先,一个系统比较大的话,需要架构得比较好,简单来讲,继承与多态在这个地方显得非常重要。在我的系统中,前台全部继承自baseuser.cs。
这样我们要想替换页面中的动态地址为静态就好办了。
让我们重写Render。Render将在页面最终输出前被我们截取数据,这些都是程序运行完。而还没输出的时候,那我们在这个时机修改是最恰当的。
代码如下
Code
protected override void Render(HtmlTextWriter writer)
{
//此方法自动写出 HTML 元素的开始标记的结束字符 (>)。对没有属性的 HTML 元素使用此方法。
//此方法适合于html,hr等元素
//下句输出<html>
StringWriter sw = new StringWriter();
HtmlTextWriter htmlw = new HtmlTextWriter(sw);
//把页面生成内容拿出来
base.Render(htmlw);
htmlw.Flush();
htmlw.Close();
string LocalPath = HttpContext.Current.Request.Url.LocalPath;
string pageContent = sw.ToString();
string tFilter = config["site_url"] + "/Default.aspx#"
+ "news.aspx#"
+ "group.aspx#"
+ "market.aspx#"
+ "technique.aspx#"
+ "\"templets/style#"
+ @"news_shows.aspx\?Nid=(.[0-9]*)&cid=(.[0-9]*)#"
+ "/http://www.cnblogs.com/html/#";
;
string toster = config["site_url"] + "/Default.html#"
+ "news.html#"
+ "group.html#"
+ "market.html#"
+ "technique.html#"
+ "\"" + config["site_url"] + "/templets/style#"
+ @"http://www.cnblogs.com/html/c$2/$1p1.html#"
+ "/html/#";
pageContent = fun.ReFilter(pageContent, tFilter, toster);
Response.Write(pageContent);
//base.Render(writer);
}
这里用到一个函数fun.ReFilter
在新闻系统中,为什么我们要考虑模板,让不同显示的效果在一个地址里呈现,这就和伪静态有关,如果我们直接用不同的地址,那我们想要替换的部分就难以预测。难以规范。这还涉及到后面我们要做的工作,把新闻系统的页面生成静态。伪静态的办法也为我们后面生成真正的静态提供了一个解决办法。
Code
public static string ReFilter(string sString, string tFilter, string toster)
{
string nows = sString;
string[] textArray1 = tFilter.Split(new char[] { '#' });;
string[] textArray2 = toster.Split(new char[] { '#' });
for (int num1 = 0; num1 < textArray1.Length; num1++)
{
string text1 = textArray1[num1];
string text2 = textArray2[num1];
nows = Regex.Replace(nows, text1, text2, RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline);
}
return nows;
}
我的项目中使用效果示例:http://www.21nm.net/info/supply_demand_c1.html
欢迎拍砖。