广

ASP.NET

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

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

    2018-04-06 10:41:59 次阅读 稿源:互联网
    广告

      猛然发现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:windowsmicrosoft.netframeworkv2.0.50727aspnet_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}引用了这个组
      第三个是固定字符串替换
      呵呵,看来正则表达式还是很重要滴~~

      http://www.cnblogs.com/thinhunan/archive/2006/08/22/regexurlmapping.html

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告