学习篇: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的人,前来解惑....

 

posted @ 2012-10-26 01:28  2月18号  阅读(291)  评论(1编辑  收藏  举报