2012-01-21 38 views
1

我有Index()Foo(int id)行動和路由這樣的家庭控制器:如何所有無效的URL重定向到一些動作

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

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
    ); 

所以像//123工作的網址,因爲他們應該做的。然而,當URL是/blahblah其中blahblah不是一個有效的操作名稱,我得到

參數字典包含非可空類型「System.Int32」

的參數「ID」無效項錯誤

這是正常的,當然是因爲Foo動作得到int參數而不是int?

問題是我不能使用int,因爲這樣既IndexFoo行動匹配/ URL,所以不必要的額外Foo通話。

所以問題是,是否有可能捕捉到上面的異常,或將所有無效的URL(如/blahblah)重定向到其他操作。

回答

4

約束id令牌上的Foo路由定義爲數字:

routes.MapRoute(
    "Foo", 
    "{id}", 
    new { controller = "Home", action = "Foo" }, 
    new { id = @"\d+" } 
); 

現在:

  • /將達到HomeController/Index
  • /123將達到HomeController/Foo並通過id = 123作爲參數
  • /foobar會返回一個404
+0

偉大的,這就是我需要:) – user1121956

+0

哇,不知道這是可能的。 –

0

如果定義了像字符串ID以下

public ActionResult Index(string id) 
{ 
    ... 
} 

然後,所有網址,包括/ blahblah將指向您的家庭的指數函數。

相關問題