2013-01-04 89 views
2

我想要發生的是,如果用戶導航到Controller Action頁面,如Home/Index,並且存在操作,然後繼續正常。但是,如果用戶導航到不存在的Controller ActionHome/NotExist那麼我想將其默認爲名爲MyController的「默認」控制器。自定義路由如果控制器操作不存在mvc4

我已經試過它接受*url*

routes.MapRoute(
        "CustomRoute", 
        "{*url}", 
        new { controller = "MyController", action = "MySingleAction" } 
    ); 
routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 

Home/Index正去CustomRoute,而不是默認

NB我試圖把路由的標準默認路由之前添加路由之後它會拋出一個錯誤

+1

查看http://www.devcurry.com/2012/06/aspnet-mvc-handling-exceptions-and-404.html,特別是處理404錯誤。您應該能夠路由到默認的控制器/操作。這條路。 – Syneryx

+3

@Syneryx - 謝謝你,所以我必須拋出一個404異常? MVC應該嘗試並在拋出異常之前映射路由 – CR41G14

+0

據我所知,嘗試訪問錯誤的URL時默認會拋出404錯誤。並且您將自動定向到控制器等。 – Syneryx

回答

0

你應該讓你的自定義路線成爲最後定義的路線。在這種情況下:

routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 

routes.MapRoute(
        "CustomRoute", 
        "{*url}", 
        new { controller = "MyController", action = "MySingleAction" } 
    ); 
+1

這是行不通的,我得到一個404異常 – CR41G14

+1

問題是任何具有兩個名稱/ something/else的路由將與params控制器「something」和action「else」匹配第一個路由,即使這樣的控制器/動作不會不存在。路線不夠聰明,看看參數是否有意義。他們所做的只是模式匹配。所以第一個路由可能會匹配一個自定義的URL和404導致控制器/操作不存在。 – AaronLS

相關問題