频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

支持正则表达式的UrlMapping

来源:pcdog 作者:佚名 出处:巧巧读书 2008-01-10 进入讨论组

  猛然发现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>

  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}引用了这个组

  第三个是固定字符串替换

  呵呵,看来正则表达式还是很重要滴~~

保留地址 http://www.qqread.com/aspdotnet/g392190.html进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章