关于urlrewrite的小DEMO

代码

        public string Path
        {
            get { return Server.MapPath("~/rewrite.config"); }
        }

        protected void Application_BeginRequest(object sender,EventArgs e)
        {
            string originalurl, newurl;
            originalurl = Request.Url.PathAndQuery;
            RewriteConfig config = new RewriteConfig(this.Path);
            newurl=config.MappingUrl(originalurl);
            HttpContext.Current.RewritePath(newurl);                        
        }
RewriteConfig 类

namespace UrlRewrite
{
    /// <summary>
    /// 默认页的枚举
    /// </summary>
    public enum Mapped
    {
        defaultPage = "~/Default.aspx"
    }

    public class RewriteConfig
    {
        /// <summary>
        /// 初始化一个xmldoc对象
        /// </summary>
        XmlDocument XmlDoc=new XmlDocument();

        /// <summary>
        /// 文件名称
        /// </summary>
        string filePath;
        public string FilePath
        {
            get { return filePath; }
            set { filePath = value; }
        }

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="filePath">文件地址</param>
        public RewriteConfig(string filePath)
        {
            this.FilePath = filePath;
        }
       
        public RewriteConfig() { }        

        /// <summary>
        /// 将文件加载到xmldoc中
        /// </summary>
        public void LoadConfig()
        {
            this.XmlDoc.Load(this.FilePath); 
        }

        /// <summary>
        /// 匹配规则,得到真实的请求url
        /// </summary>
        /// <param name="originalUrl"></param>
        /// <returns></returns>
        public string MappingUrl(string originalUrl /*来源url*/)
        {
            this.LoadConfig();
            XmlNodeList rulesList = this.AllMappingRegulation();
            if (rulesList == null)
            {
                return Mapped.defaultPage ;
            }
            foreach (XmlNode regulars in rulesList)
            {
                XmlNodeList regular = regulars.ChildNodes;
                Regex reg = new Regex(regular[0].InnerText);

                if (reg.IsMatch(originalUrl))  //如果来源页与规则匹配
                {
                    return Regex.Matches(originalUrl,regular[0].InnerText)[0].Result(regular[1].InnerText); //关键的替换工作
                }
            }
            return Mapped.defaultPage ;
        }

        /// <summary>
        /// 得到所有的规则
        /// </summary>
        /// <returns></returns>
        public XmlNodeList AllMappingRegulation()
        {
            XmlNodeList list = this.XmlDoc.SelectSingleNode("urlrewrites").ChildNodes;
           
            if (list != null)
            {
                return list;
            }
            else
            {
                return null;
            }
        }
    }
}
映射规则
<?xml version="1.0" encoding="utf-8"?>
<urlrewrites>
 <rule>
  <source>/default.aspx</source>
  <target>~/default.aspx</target>
 </rule>
 <rule>
  <source>/urlrewriter/show(.*)\.asp</source>
  <target>show.aspx?$1</target>
 </rule>
 <rule>
  <source>/urlrewriter/(.*)show\.html</source>
  <target>show.aspx?id=$1&amp;cat=2</target>
 </rule>
 <rule>
  <source>/urlrewriter/s/h/o/w/(.*)\.html</source>
  <target>/urlrewriter/show.aspx?id=$1</target>
 </rule>
</urlrewrites>

不知道读取。config文件还有没有其他的好方法阿。
希望大家可以提意见大家多交流,共同进步啊。

posted @ 2008-03-21 12:04  pysharp  阅读(294)  评论(0编辑  收藏  举报