對於問一個相當不錯的問題,我對ASP.NET MVC來說是個新手。 我的問題是:MVC 3 Fall-through routing
我希望我的網站,以下列方式處理網址:
www.mysite.com/homepage/name
我想上面的鏈接轉到該用戶的個人資料。爲了簡單起見,控制器將作爲主控制器與測試行動。
意思就是在Global.asax路由將是:
routes.MapRoute(
"test",
"homepage/{name}",
new { controller = "Homepage", action = "Test" }
);
截至目前爲止代碼的偉大工程(我已經測試它和它的路線確定)。
但現在我的其他的功能,我想是使:
www.mysite.com/homepage/action/id
要正常工作。
該路由將是:
routes.MapRoute(
"Default",
"homepage/{action}/{id}",
new { controller = "Homepage", action = "Index", id = UrlParameter.Optional }
);
問題是,當用戶想要省略{ID}一個動作會發生什麼,路由表中檢測到動作名稱實際上是{名}參數。
有沒有什麼辦法可以先檢查一個動作是否存在。並且只有在沒有的情況下,纔可以將其用作不同路線的參數。
有意義嗎?如果沒有,我會添加更多的細節。
謝謝!
編輯
所以我已經成功利用此約束的正則表達式 我把定義在我的控制器中的所有動作的正則表達式來解決:
routes.MapRoute(
"homepage",
"homepage/{action}/{id}",
new { controller = "Homepage", action = "Index", id = UrlParameter.Optional },
new { action = "(action1|action2|action3)" }
);
再下一條規則:
routes.MapRoute(
"feed",
"homepage/{id}",
new { controller = "Homepage", action = "Test"}
);
我工作正常,只有這很難衡量。您需要記住將這些控制器中的每個新動作放在字符串中。這是調試惡夢的巨大開局。
謝謝!
如果用戶創建一個名爲Index的帳戶,或者您的操作名稱是什麼,會發生什麼? – 2012-04-05 15:01:21
我猜這一切都需要與數據庫管理同步。這是一個很好的問題。我們這樣做的方式是自己產生slu so,所以我們有權保留一些字符串。 – oamsel 2012-04-05 15:28:36
我想我的觀點是,通過使用不同的路徑來設計事物真的會更好,所以這種混淆不會發生。 – 2012-04-05 15:42:43