熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

支持正則表達式的UrlMapping

2022-06-13   來源: .NET編程 

  猛然發現ASPNET 本身就提供了對UrlMapping的天然支持——nfig文件中的<urlMappings>節感歎現在寫程序真的不是什麼技術活了

  

  <?xml version=?>
<configuration>
  <systemweb>
    <urlMappings>
     <add url=~// mappedUrl=~/Monthaspx?year=&amp;month=/>
     <add url=~// mappedUrl=~/Monthaspx?year=&amp;month=/>

  </urlMappings>
        <compilation debug=true/>
  </systemweb>
</configuration>

  這個配置可以使ASPNET程序在ASPNET Development Server(就是建ASPNET項目時選文件系統)直接支持UrlMapping不過它有幾個不足之處

  只能映射固定的地址所以只能一個地址一個地址的配置

  ASPNET Development Server中可以不用配什麼別的地方在IIS中受請求響應模型所限估計還是要在IIS中設映射這樣的話反而搞得我到處找資料看怎麼實現在ASPNET Development Server設置映射得到的結果是不行

  針對於UrlMapping的不支持正則表達式的缺陷我做了個支持正則表達式的UrlMapping可惜由於UrlMapping是由HttpApplication調用的而HttpApplication是Internal的不能對它做什麼動作所以實現的東東和UrlMapping相比做在nfig中多做個<Section>

  nfig中的配置舉例如下

  

  <?xml version=?>
<configuration>
    <configSections>
     <section name=RegexUrlMappings type=CnblogsDTCTHINRegexUrlMapping
RegexUrlMappingsSectionCnblogsDTCTHINRegexUrlMapping/>
    </configSections>
    <RegexUrlMappings enabled=true rebaseClientPath=true>
        <add url=(\d+)$ mappedUrl=defaultaspx?id=$/>
        <add url=(?&lt;=/)(?&lt;id&gt;[az]+)$ mappedUrl=defaultaspx?
id=${id} />
        <add url=/$ mappedUrl=/defaultaspx?id=/>
    </RegexUrlMappings>
    <systemweb>
        <httpModules>
         <add name=RegexUrlMappingModule type=CnblogsDTCTHIN
RegexUrlMappingRegexUrlMappingModuleCnblogsDTCTHIN
RegexUrlMapping/>
        </httpModules>
        <compilation debug=true/>
        <authentication mode=Windows/>
    </systemweb>
</configuration>

  其中RegexUrlMapping的屬性enabled用於打開和關閉映射rebaseClientPath參見HttpContextRewritePath中rebaseClientPath參數

  <add>用於添加映射規則url為匹配路徑的正則表達式patternmappedUrl是替換規則用法參見RegexReplace方法

  上例中第一個add在url中用括號定義了組所以在後面引用$

  第二個add在url中用(?<id>)定義了組id後面用${id}引用了這個組

  第三個是固定字符串替換

  呵呵看來正則表達式還是很重要滴~~


From:http://tw.wingwit.com/Article/program/net/201311/12016.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.