现在的位置: 首页 > 综合 > 正文

Url重写一劳永逸篇

2012年05月15日 ⁄ 综合 ⁄ 共 5301字 ⁄ 字号 评论关闭
  Url重写可以提升用户体验,所以我们一直在追求,呵呵,先来一句广告语。 

我这里是用HttpHandlerFactory和在Web.config中添加一个配置节来实现重写的,举个例子先:
原始Urlabc.aspx?aid=121&bid=321&mid=9
重写Urlabc-121-321-9.shtml

原始Urlxyz.aspx?type=a 或者xyz.aspx?type=b
重写Urlxyz-a.shtml或者xyz-b.shtml

而且这里希望一劳永逸的实现Url参数类型千变万化的形式的重写。 

先看我们需要什么样的配置:
对于每一种重写我们都需要写出要重写成的Url的正则表达式的匹配形式,然后我们还需要配置原始Urlaspx路径,再就需要配置每一个参数在重写成的Url中怎么提取出来成为查询字符串,让原始的aspx去读取,说到这里,请看下面具体的配置节。

<configSections>
    
<section name="handlerSettings" type="book.Provider.ConfigHandler, book"/>
  
</configSections>
    
  
<!--配置Url路径重写参数,如有任何疑问联系赵玉开-->
  
<handlerSettings>    
  
<!--
  一个handler代表一中url的映射
  regex是用来匹配Url的,如果匹配就使用对应的aspxPath中映射的handler
  aspxPath需要是一个可以经过Server.MapPath转换的aspx文件的虚拟路径
  params是在url中包含参数的设置
  param的两个属性:name是连接字符串的名字,valueRegexGroupName是正则表达式中匹配的对应名字的查询字符串的值的正则表达式组名字
  
-->
    
<handler name="news">
        
<regex>/(?&lt;id&gt;[\d]+).shtml</regex>
        
<aspxPath>detail.aspx</aspxPath>
        
<params>
            
<param name="id" valueRegexGroupName="id"/>
        
</params>
    
</handler>        
  
</handlerSettings>

请大家看配置里面的注释。

有了配置节,我们就需要解析配置的类了,如下ConfigHandler用来读取配置节的信息,并将所有的配置信息实例化成ConfigItem 数组,然后放在这个类的一个静态数组中。


解析出了重写的配置信息,我们的主角就该出场了,从IHttpHandlerFactory 继承的HanderFactory

HandlerFactory

抱歉!评论已关闭.