URL映射
URL映射特性利用web.config中儲存的配置資訊把收到的請求重新對應(remap)到不同的URL。重新對應發生在對請求的所有其它處理操作之前。下面的例子示範的是重新對應一個頁面請求,實際上任意檔案類型都可以把請求重新對應到不同的URL。
定義重新對應URL
URL映射的配置資訊儲存在web.config中。元素中嵌套的每個元素為重新對應進入網站的(inbound)url定義了一條規則。url屬性定義了進入網站的url的exact(原樣)屬性,URL映射特性會試圖用它進行匹配操作。如果exact匹配操作發生了,就會給進入網站的URL重新寫入mappedUrl屬性值。請注意,這個特性不支援更進階的規則(例如基於萬用字元和Regex的匹配)。
樣本web.config為大量的url定義了映射規則。樣本使用的web.sitemap檔案定義的大量帶有URL值的節點都會被重新對應。其結果是,URL映射和網站導覽的組合使用,使得開發人員可以用友好的url來定義導航結構,並使用URL映射把請求重新寫到不同的頁面來執行實際的處理過程。
當你運行樣本的時候,請注意Menu和Treeview控制項是如何根據web.sitemap檔案中定義的網站結構來顯示導航資料的。如果你把滑鼠停留在Treeview控制項或右上方的SiteMapPath控制項的連結上方,狀態列中顯示的url是一個友好的url連結。當你點擊任何導航連結的時候,實際啟動並執行頁面是Default.aspx。但是,Menu、Treeview和SiteMapPath控制項中的導航資訊仍然反映為友好的URL結構。
在頁面的底部你還可以看到Request.Path、Request.QueryString["category"]和Request.RawUrl返回的值。Request.Path和Request.QueryString["category"]返回的值一直反映重新對應進入網站的url的結果。但是,Request.RawUrl的值反映了重新對應之前的友好的url。當網站導覽特性試圖把url資訊與sitemap檔案包含的資料進行匹配的時候,它會使用Request.RawUrl。如果匹配的值沒有找到,XmlSiteMapProvider就把Request.Path作為替代者。在例子中,所有的友好url在web.sitemap檔案中都有條目,因此使用網站導覽的控制項一直根據友好的url來顯示和引用節點。
以下是引用片段:
<?xml version="1.0" ?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<system.web>
<urlMappings enabled="true">
<add url="~/Category.aspx" mappedUrl="~/Default.aspx?category=default" />
<add url="~/Autos.aspx" mappedUrl="~/Default.aspx?category=autos" />
<add url="~/Games.aspx" mappedUrl="~/Default.aspx?category=games" />
<add url="~/Health.aspx" mappedUrl="~/Default.aspx?category=health" />
<add url="~/News.aspx" mappedUrl="~/Default.aspx?category=news" />
</urlMappings>
</system.web>
</configuration>