2010-06-08 36 views
11

我已經看過StackOverflow上的路由,並且我有一個非常不錯的問題,但是我想澄清一點。ASP.NET MVC像StackOverflow中那樣的用戶路由?

我在用戶控制器

https://stackoverflow.com/Users
https://stackoverflow.com/Users/Login
https://stackoverflow.com/Users/124069/rockinthesixstring

什麼我注意到的是,有一個「用戶」控制器可能與一個默認的「指數」行動專門找和「登錄」操作。我面臨的問題是可以忽略登錄操作,也可以使用「UrlParameter.Optional [ID]」。

這看起來如何在RegisterRoutes集合?或者我錯過了一些完全明顯的東西?

編輯:這裏是我目前的路線..但它絕對不是正確的。

routes.MapRoute(_ 
     "Default", _ 
     "{controller}/{id}/{slug}", _ 
     New With {.controller = "Events", .action = "Index", .id = UrlParameter.Optional, .slug = UrlParameter.Optional} _ 
    ) 
+0

不知道爲什麼人們投票關閉。這是一個合法的編程問題..我非常想知道如何解決這個問題。 – 2010-06-08 19:36:08

+0

你在哪裏看到投票結束? – 2010-06-08 19:37:13

+0

這個__not__屬於Meta。 – 2010-06-08 19:37:55

回答

5

可能只是使用一個特定的路線來處理它,還用正則表達式來指定ID的格式(所以它不會混淆,將包含在該位置的動作名稱其他途徑)。

// one route for details 
routes.MapRoute("UserProfile", 
    "Users/{id}/{slug}", 
    new { controller = "Users", action = "Details", slug = string.Empty }, 
    new { id = @"\d+" } 
); 
// one route for everything else 
routes.MapRoute("Default", 
    "{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional} 
); 
+0

我同意這種直接的方法將工作,但我也懷疑作者的方法有點複雜:路線存儲在外部文件中,並在運行時加載,而Java腳本路由助手每生成一次請求:)不知道最好這裏的做法 – 2010-06-08 19:57:52

+0

無論如何加載路由,您必須具有一些特定的方式來描述路由如何映射到具有適當參數的controller.action。對? – 2010-06-08 20:00:41

+0

是的。這將是非常好的,如果作者會下來,並回答:) – 2010-06-08 20:01:58

1

沒有SO開發人員給出明確的答案,逆向工程可能會產生許多可能的組合和排列。這裏有一個,我認爲也適合

routes.MapRoute(
    "UserProfile", 
    "Users/{id}/{slug}", 
     new { controller = "Users", action = "Profile" } 
); 

routes.MapRoute(
    "UserLogin", 
    "Users/Login", 
    new { controller = "Users", action = "Login" } 
); 

routes.MapRoute(
    "DefaultUser", 
    "Users", 
    new { controller = "Users", action = "Index" } 
);