好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

自定义实现URL重写 04.18

自定义实现URL重写 04.18

自定义实现URL重写 04.18

1、定义XML规则,配置好URL节点

 ?xml version="1.0" encoding="utf-8" ?>
  <  urls  > 
   <  rewrite   name  ="ShowNews"   pattern  ="news-(\d+).html"   
           page  ="news.aspx"   query  ="id=$1"  > 
    
   </  rewrite  > 
 </  urls  > 

2、对XML的解析,对其进行封装

   public   class   MyUrlRewrite
    {
          public   string  Name {  get ;  set  ; }
          public   string  Pattern {  get ;  set  ; }
          public   string  Page {  get ;  set  ; }
          public   string  Query {  get ;  set  ; }
    }

      public   class   UrlList
    {
          private   static   UrlList instance;
          public  List<MyUrlRewrite>  GetAllUrls
        {
              get  ;
              set  ;
        }
         
          private   UrlList()
        {
            GetAllUrls  =  new  List<MyUrlRewrite> ();
            XmlDocument xmlDoc  =  new   XmlDocument();
              string  xmlPath = HttpContext.Current.Request.PhysicalApplicationPath +  "  /UrlLink.config  "  ;
            xmlDoc.Load(xmlPath);
            XmlNode node  = xmlDoc.SelectSingleNode( "  urls  "  );
              foreach  (XmlNode item  in   node.ChildNodes)
            {
                XmlAttribute name  = item.Attributes[ "  name  "  ];
                XmlAttribute pattern  = item.Attributes[ "  pattern  "  ];   
                XmlAttribute page  = item.Attributes[ "  page  "  ];
                XmlAttribute query  = item.Attributes[ "  query  "  ];
                  if  (name ==  null  || pattern ==  null  ||  query ==  null  || pattern ==  null  )
                      continue  ;
                MyUrlRewrite model  =  new   MyUrlRewrite();
                model.Name  =  name.Value;
                model.Pattern  =  pattern.Value;
                model.Page  =  page.Value;
                model.Query  =  query.Value;
                GetAllUrls.Add(model);
            }
        }
          public   static   UrlList GetUrlList()
        {
              if  (instance ==  null  )
            {
                instance  =  new   UrlList();
            }
              return   instance;
        }
    } 

3、自定义IHttpModule接口实现URL重写【关于此接口的介绍不做多讲,网上有很多】

  /*  *
     * 向实现类提供模块初始化和事件处理
     * 
       */  
     public   class   MyHttpModule : System.Web.IHttpModule
    {
          #region  IHttpModule 成员

         //  处置由实现 IHttpModule 的模块使用的资源(内存除外)。 
         public   void   Dispose()
        {
              throw   new   NotImplementedException();
        }
          //  初始化模块,并使其为处理请求做好准备。 
         public   void   Init(HttpApplication context)
        {

            context.BeginRequest  +=  new   EventHandler(context_BeginRequest);
        }

          void  context_BeginRequest( object   sender, EventArgs e)
        {
            HttpContext context  =  ((HttpApplication)sender).Context;
              string  requestPath =  context.Request.Path.ToLower();
              foreach  (MyUrlRewrite item  in   UrlList.GetUrlList().GetAllUrls)
            {
                  //  不区分大小 写   
                 if   (Regex.IsMatch(requestPath, item.Pattern, RegexOptions.IgnoreCase))
                {
                      string  newUrl =  Regex.Replace(requestPath, item.Pattern, item.Query);
                      if  (newUrl.Length ==  0  )
                        context.RewritePath(item.Page);
                      else  

                        context.RewritePath(item.Page  +  "  ?  "  + newUrl.Substring( 1  ));
                }
            }
        }

          #endregion  
    } 

4、在web.config进行相应的配置

 <  httpModules  >  
    <  add   name  ="urlrewrite"   type  ="_017_URL重写.MyHttpModule,017_URL重写"  /> 
 </  httpModules  > 

5、最终的效果图

 

小结:

     1、了解asp.net的管道和生命周期很重要

    2、将程序可配置化,避免总是修改demo,采用xml定义规则

    3、最重要的是:湖人进入季后赛了,但科比受伤了。

 

 

分类:  C# ,  每日代码秀 ,  设计模式

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于自定义实现URL重写 04.18的详细内容...

  阅读:42次