2008-11-25 76 views
2

在我的路由中,我想找到類似找不到路由處理程序的東西。所有極端情況下的默認路由

比如我創建了像

routes.MapRoute(
        "default", 
        "{controller}/{action}/{id}", 
        new { controller = "Home", action = "Index", id="" } 
      ); 

routes.MapRoute(
        "Catchall", 
        "{*catchall}", 
        new { controller = "Home", action = "Lost" } 
      ); 

但一個映射,當用戶插入解決類似/一/二/三/四/ BLA/BLA將與全部接收映射緩存。

但是,當用戶插入的東西,應與默認映射, (如/一/二/,但這種控制器或動作沒有實現) 我想那全部接收映射會接受這一要求, 因爲所有其他映射失敗。但是,而不是我得到一個錯誤。

我應該重寫一些映射處理程序來捕捉異常,如果控制器或操作獲取異常?

+0

有沒有想到這一點? – yaegerbomb 2012-06-14 20:44:56

回答

0

這裏的問題是,確保「one/two」映射到文件不是Route的責任。這個責任落在了ViewEngine上。由於「一個/兩個」是有效的路線,它將被選擇。

如果你想處理一個無效路由的錯誤,我建議你做的只是使用內置的ErrorHandling「頁面」來顯示任何你會在Catchall中做的消息。

0

我不認爲這是最好的解決辦法,但你總是在你的路線更具體:

routes.MapRoute(
    "home and action", 
    "home/index/{id}", 
    new { controller = "Home", action = "Index", id="" } 
); 

...重複對自己的行爲休息...

routes.MapRoute(
    "article catch all", 
    "home/{article}", 
    new { controller = "Home", action = "ArticleSearcher", article="" } 
); 

這將嘗試匹配直接操作,如果未找到任何操作,則將通常爲默認路由的{action}部分作爲文章字符串參數傳遞給'ArticleSearcher'操作。

缺點是必須明確地創建每個控制器/操作路線。

相關問題