猛然發現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的不支持正則表達式的缺陷,我做了個支持正則表達式的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參見HttpContex
t.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