2009-02-16 192 views
1

我也有類似的路由表這個ASP.NET MVC RC1路由問題

// Allow browsing categories by name, instead of by ID. 
routes.MapRoute("Categories", "Categories/{action}/{name}", 
    new { controller = "Categories", action = "Index", name = "" } 
); 

// All other pages use the default route. 
routes.MapRoute("Default", "{controller}/{action}/{id}", 
    new { controller = "Applications", action = "Index", id = "" } 
); 

// Show a 404 error page for anything else. 
routes.MapRoute("Error", "{*url}", 
    new { controller = "Error", action = "404" } 
); 

但是在最後通配符路線不被調用......如果我在一個控制器或URL,它不鍵入存在它試圖在通配符路由上方的默認路由...因此導致沒有找到ASP.net錯誤頁面的無用資源...我想要一個自定義錯誤頁面...請幫助

回答

1

爲什麼不創建標準的ASP .NET自定義錯誤頁面?

<customErrors 
     mode="RemoteOnly" 
     defaultRedirect="~/View/Shared/CustomErrorPasge.aspx" 
/> 
1

如果您鍵入一個控制器不存在,比如'BadController/SomeAction/123',它會被第二條路線拾取。

最後一條路線只會在前兩條路線中找不到,比如「/SomeRandomFile.aspx」的網址,或者其他與「{controller}/{動作}/{id}'語法。

在我的項目中,我在我的web.config文件中使用<customErrors mode="RemoteOnly" defaultRedirect="/Error" />作爲異常的「全部捕獲」規則。假設您沒有將請求路由到'/ Error'的規則,則需要一個錯誤控制器。

然後,您可以使用protected void Application_Error(object sender, EventArgs e)方法在發生異常時執行某些代碼。