首页 > 编程 > .NET > 正文

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

2024-07-10 13:09:49
字体:
来源:转载
供稿:网友
  • 本文来源于网页设计爱好者web开发社区http://www.html.org.cn收集整理,欢迎访问。
  • 猛然发现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}引用了这个组
    第三个是固定字符串替换
    呵呵,看来正则表达式还是很重要滴~~

    发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表