学习篇:Url重写和全站静态化
大家好,我是2月18号的博主——博主4号。
1.url重写,首先我是先在Application_BeginRequest中捕获url重写了规则
protected void Application_BeginRequest(Object sender, EventArgs e) { string url = Request.AppRelativeCurrentExecutionFilePath; // Match match = Regex.Match(url, @"~/BookList2_(\d+)\.aspx"); if (match.Success) { int id = Convert.ToInt32(match.Groups[1].Value); Context.RewritePath(string.Format("/BookList2.aspx?categoryId={0}", id)); } }
再盗用了大神写好的两个UrlRewrite类。。。
不敢独享,分享之.....
UrlRewriter.cs
public class UrlRewriter : HtmlTextWriter { public UrlRewriter(HtmlTextWriter writer) : base(writer) { this.InnerWriter = writer.InnerWriter; } /// <summary> /// 重写基类的WriteAttribute()方法 /// </summary> /// <param name="name">要写的属性的名称</param> /// <param name="value">要写的属性的值</param> /// <param name="fEncode"></param> public override void WriteAttribute(string name, string value, bool fEncode) { if (name.ToLower() == "action") { var context = HttpContext.Current; if (context.Items["ActionRewrite"] == null) { value = context.Request.RawUrl;//原始路径 context.Items["ActionRewrite"] = true;//设置标记,已经重写action属性. } } base.WriteAttribute(name, value, fEncode); } }
UrlRewriterControlAdapter.cs
public class UrlRewriterControlAdapter:ControlAdapter { protected override void Render(HtmlTextWriter writer) { base.Render(new UrlRewriter(writer)); } }
黏贴至根目录,url重写搞定,原理性的东东,等待我看懂之后与大家说说 呵呵.... 看谁先看懂...
然后,我就开始了书籍详情页的页面静态化的工作。
2.页面静态化就好整点了,就是拼接字符串。最后按照一定的存放规则将生成好的html文件存放即可。
这里我用到了模板页的应用,注意模板页调用js css img 等文件的时候,记得写绝对路径,不然会报错,因为 相对路径已经找不到 这些文件了,因为以一定的规则来存放html页了。
然后,晚上回来反正闲着也是闲着看看url重写,一看微软有很简单的应用。有个UrlRewrite.dll组件可以轻松完成url重写的工作,于是乎,我就心血来潮,开始按照博客大牛的方法搞起了。
原来真的很简单,config里面添加规则就ok了。
但是,当我点击我生成的静态页的时候,就发生问题了。错误提示....
没有为扩展名“.html”注册的生成提供程序。可以在 machine.config 或 web.config 中的 <compilation><buildProviders> 节注册一个。请确保所注册的提供程序具有包含值“Web”或“All”的 BuildProviderAppliesToAttribute 特性。
哈哈,搞晕我...不懂原理的我,眼泪掉下来....
后来网上找了些许方法,都没搞定的我,将代码一一改了回去了。。。。
等待更牛B的人,前来解惑....