2012-05-01 114 views
0

我有一個CMS系統,我正在使用路由來獲取頁面名稱。我需要在第一個項目和最後一個項目(頁面名稱)之間有無限的值(子目錄,產品名稱,不同的本地化)。ASP.NET URL使用通配符路由

例如:

/產品/電腦/ ComputerType1/

而且

/PRODUCTOS/Ordenadores/ComputerType1/

哪裏ComputerType1是頁面的名稱。

routes.Add(new Route("{*route}/{pageName}", routeHandler)); 

我不能找到一種方法,使中間部分({*}路線)的路線是通配符,以便可以在頁面名稱前面放子目錄的數量不受限制。目前我只能通過使用默認通配符路線來解決此問題,例如:

routes.Add(new Route("{*route}", routeHandler)); 

捕捉所有內容。但是,通配符似乎也甚至你我把它指定爲路徑代碼忽略上面又讓GIF網址:

routes.Ignore("{resource}.axd/{*pathInfo}"); 
routes.Ignore("{resource}.asmx/{*pathInfo}"); 
routes.Ignore("{resource}.ashx/{*pathInfo}"); 
routes.Ignore("{resource}.gif/{*pathInfo}"); 
routes.Ignore("{resource}.png/{*pathInfo}"); 
routes.Ignore("{resource}.jpg/{*pathInfo}"); 
routes.Ignore("{resource}.ico/{*pathInfo}"); 
routes.Ignore("{resource}.pdf/{*pathInfo}"); 
routes.Ignore("{resource}.css/{*pathInfo}"); 
routes.Ignore("{resource}.js/{*pathInfo}"); 

是否有這樣做的更好的辦法?這應該通過一個自定義的路由處理程序來處理?

回答

0

是你應該爲這樣的
簡單的情況下,路由處理程序創建一個classRouteBase
覆蓋產生它的GetRouteData方法
這個方法,你可以訪問當前httpcontext,因此您可以訪問請求URL
所以你可以相應地路由。
欲瞭解更多定製路線信息,請訪問此鏈接
http://www.codeproject.com/Articles/299531/Custom-routes-for-MVC-Application

+0

自定義路線工作。不過,我仍然遇到了一個通配符路由,它捕獲位於「App_Themes/directoryname/images/image1.gif」中的gif文件。 Route.Ignore的路由忽略(「{resource} .gif/{* pathInfo}」);僅在圖像位於根目錄中時才起作用。我注意到的一件事是圖像文件在主題中被引用,但文件不存在於主題中的其他圖像文件確實存在並且不試圖被路由的地方。我正在考慮添加一個基於「/ App_Themes/{文件夾} .....」的忽略路由。還有其他建議嗎? – econner

+0

好吧,它看起來像問題是主題中引用的gif圖像,但acutal文件不存在,所以IIS不能忽略「文件」,並將其路由爲一個catchall url。 – econner