职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 1044|回复: 0

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

[复制链接]
joe 发表于 2007-1-25 14:30 | 显示全部楼层 |阅读模式
猛然发现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&month=01\"/>
            <add url=\"~/2006/08\" mappedUrl=\"~/Month.aspx?year=2006&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=\"(?<=/)(?<id>[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}引用了这个组
第三个是固定字符串替换
呵呵,看来正则表达式还是很重要滴~~
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-13 07:12 , Processed in 0.126464 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表