2010-08-23 101 views

回答

3

你必須要小心在你申報你的路由的順序。由於/{username}網址沒有共同元素,因此您需要將其聲明爲所有特定路線之後的最後一條「全部通過」路線。

RouteTable.Routes.MapRoute(null, "LogIn", new { controller = "Account", action = "LogIn" }); 
RouteTable.Routes.MapRoute(null, "LogOut", new { controller = "Account", action = "LogOut" }); 
// ... other routes go here ... 

// Final catch-all route to map /{username} to the Account.Details action. 
RouteTable.Routes.MapRoute(null, "{id}", new { controller = "Account", action = "Details" }); 

這也是值得記住的是,你需要在用戶名擴展您的驗證,以防止人們選擇的名稱與具體途徑(例如的LogIn)衝突。

+0

+1 - 如果你問我關於驗證你可能想要的任何未來的網址...危險地帶。 – BritishDeveloper 2010-08-23 16:15:48

+0

我同意,與此相關的維護成本很高。另一方面,在驗證不足的情況下,只有具有路由衝突的用戶纔會出現問題。該應用程序將繼續適用於非衝突用戶。 如果你能想到更好的方式來實現理想的路由,請分享。 – 2010-08-31 11:28:49

1

我想,他們有一些常規的異常檢查,看看是否匹配的東西,可能是用戶的個人資料,然後按該請求到合適的控制器動作的請求。

他們會很可能會首先列出所有的例外是靜態路由,如「/請柬」,然後傳給其他一切試圖顯示用戶的頁面默認控制器動作。