2012-06-21 26 views
1

我建立一個網站,我想只有一個控制器,它看起來就像圖像文件的請求,並且網址:我的路線包括,當我不指定控制器

\main-page\sub-page 

main-page控制器和sub-page而不是這個動作,它們只是數據庫中的頁面名稱,我想在其中進行渲染。換句話說,有很多頁面,我不想爲每個頁面都創建一個控制器。事實上,我只想要一個Home一個Index動作,看起來像這樣的控制器:

Function Index(ByVal Page As String, ByVal SubPage As String) As ActionResult 

而且只有一個視圖,它使用的參數動態加載的頁面內容。

以下航線幾乎作品:

routes.MapRoute(
     "Default", _ 
     "{page}/{subpage}", _ 
     New With {.controller = "Home", .action = "Index", .page = "Landing", .subpage = "Index"} 
    ) 

但問題是,它也撿的文件,例如,/images/somefile.jpg請求,因爲該路由相匹配。

所以問題是:如何在沒有錯誤地獲取圖像請求的情況下做到這一點,或者是否有完全不同的方式來支持我想要做的事情?

+1

如果這條路徑上的文件,應在路由機制踢之前返回,這就是它是如何工作在默認情況下,所以我會某處尋找合適的方案其他。如果該路徑中不存在文件,路由機制將只處理路徑。 – LukLed

+0

現在你提到它,它看起來好像文件請求是針對不存在的文件的,但這也不好,因爲那麼,而不是在頁面中獲取缺少的圖像,整個頁面崩潰(因爲應用程序看起來在不存在的頁面的數據庫)。另外,我確定瀏覽器會爲返回404的圖像做一些不同的事情,而不是返回一些ASP.NET錯誤的圖像。所以我想下一個問題是:我該如何處理這個新問題? –

+0

route.IgnoreRoute()爲靜態資源路徑可能是在這裏的方式 – LukLed

回答

0

你能也許嘗試忽略路線即

routes.IgnoreRoute("{*alljpg}", new {[email protected]".*\.jpg(/.*)?"}); 

這是基於這個article這可能是比這個簡短的帖子更有幫助。

那麼這不是一個完整的猜測。我有一個相關的問題與favicon造成額外的請求。下面的代碼解決了這個問題,因此主要是聲音

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" }); 
相關問題