2009-07-22 102 views
1

有什麼辦法從框架中捕捉「未找到控制器」事件? 也許這個事件不存在。但是,如果我隨便挑一個URL扔在框架像路由系統:ASP.NET MVC控制器和擴展框架

http://localhost:54321/foobar

最終的結果沒有修改是一個404錯誤。

是通過自定義ControllerFactory捕獲這個最簡單的方法嗎?然後從那裏處理它。

更新: 我正在尋找一種方法來捕獲和處理請求流中的早些時候。不在控制器級別。請參閱Jon Galloway的回答。

回答

1

我會在路由聲明的末尾添加一個catchall路由並在那裏處理它。

/* all your other routes here */ 
routes.MapRoute("NotHandled", 
    "{*url}", 
    new { controller = "NotFound", action = "Index" }); 
+1

是,「NotHandled」一個神奇的字符串,它是框架認可? – 2009-07-22 17:28:55

+1

不,這只是一個名字。這個「魔術」就是它是一個尚未被其他任何東西捕獲的傳奇網址。 – 2009-07-22 17:32:43

1

我認爲在這裏有更多的問題比滿足眼睛。

特別是,當用戶在有效的控制器上調用有效的操作時,會發生什麼情況,並且所請求的資源(產品,文章,子類別等)不存在?

另外,爲了搜索引擎的目的,無效的URL需要返回一個真正的404錯誤。

對這些問題進行詳細的檢查,請參見以下職位:

策略在ASP.NET基於資源的404錯誤MVC
http://richarddingwall.name/2008/08/17/strategies-for-resource-based-404-errors-in-aspnet-mvc/