支持正则表达式的UrlMapping(ASP.NET2.0)

猛然发现ASP.NET 2.0本身就提供了对UrlMapping的天然支持--web.config文件中的<urlMappings>节,感叹现在写程序真的不是什么技术活了。

< ? xml version="1.0" ?>
< configuration >
    
< system .web >
        
< urlMappings >
            
< add  url ="~/2006/07"  mappedUrl ="~/Month.aspx?year=2006&amp;month=01" />
            
< add  url ="~/2006/08"  mappedUrl ="~/Month.aspx?year=2006&amp;month=02" />

        
</ urlMappings >
        
< compilation  debug ="true" />
  
</ system.web >
</ configuration >

这个配置可以使ASP.NET程序在ASP.NET Development Server(就是建ASP.NET项目时选文件系统)直接支持UrlMapping,不过它有几个不足之处:
1、只能映射固定的地址,所以只能一个地址一个地址的配置
2、 ASP.NET Development Server中可以不用配什么别的地方,在IIS中受请求响应模型所限,估计还是要在IIS中设映射。这样的话,反而搞得我到处找资料,看怎么实现在 ASP.NET Development Server设置映射,得到的结果是不行。

针 对于UrlMapping的不支持正则表达式的缺陷,我做了个支持正则表达式的UrlMapping,可惜由于UrlMapping是由 HttpApplication调用的,而HttpApplication是Internal的,不能对它做什么动作,所以实现的东东和 UrlMapping相比做在Web.config中多做个<Section>

文件下载
(下 载文件中包括RegexUrlMapping组件和一个示例ASP.NET,注意ASP.NET程序需部署在IIS中,并且要设置映射,方法是右击虚拟目 录,选属性,选配置,在通配符应用程序映射中添加c:/windows/microsoft.net/framework/v2.0.50727/ aspnet_isapi.dll的引用,并去掉确认文件是否存在的钩,这里是为了偷懒才用通配符全部映射到ASP.NET2.0的ISAPI,实际开发 中最好酌情添加具体一点的映射)

Web.config中的配置举例如下:

<?xml version="1.0"?>
<configuration>
    
<configSections>
        
<section name="RegexUrlMappings" type="Cnblogs.DTC.THIN.RegexUrlMapping.RegexUrlMappingsSection,Cnblogs.DTC.THIN.RegexUrlMapping"/>
    
</configSections>
    
<RegexUrlMappings enabled="true" rebaseClientPath="true">
        
<add url="(/d+)$" mappedUrl="default.aspx?id=$1"/>
        
<add url="(?&lt;=/)(?&lt;id&gt;[a-z]+)$" mappedUrl="default.aspx?id=${id}" />
        
<add url="/$" mappedUrl="/default.aspx?id=0"/>
    
</RegexUrlMappings>
    
<system.web>
        
<httpModules>
            
<add name="RegexUrlMappingModule" type="Cnblogs.DTC.THIN.RegexUrlMapping.RegexUrlMappingModule,Cnblogs.DTC.THIN.RegexUrlMapping"/>
        
</httpModules>
        
<compilation debug="true"/>
        
<authentication mode="Windows"/>
    
</system.web>
</configuration>

其中RegexUrlMapping的属性enabled用于打开和关闭映射,rebaseClientPath参见HttpContext.RewritePath中rebaseClientPath参数
<add>用于添加映射规则,url为匹配路径的正则表达式pattern,mappedUrl是替换规则,用法参见Regex.Replace方法
上例中,第一个add在url中用括号定义了组1,所以在后面引用$1
第二个add在url中用(?<id>)定义了组id,后面用${id}引用了这个组
第三个是固定字符串替换
呵呵,看来正则表达式还是很重要滴~~

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值