支援Regex的UrlMapping(ASP.NET2.0)

來源:互聯網
上載者:User
asp.net|正則

猛然發現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的不支援Regex的缺陷,我做了個支援Regex的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為匹配路徑的Regexpattern,mappedUrl是替換規則,用法參見Regex.Replace方法
上例中,第一個add在url中用括弧定義了組1,所以在後面引用$1
第二個add在url中用(?<id>)定義了組id,後面用${id}引用了這個組
第三個是固定字串替換
呵呵,看來Regex還是很重要滴~~



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.