2012-07-21 122 views
1

我需要一些動態路由。所以我的路線如下所示:動態ASP.net MVC路由

{UserName} 
{UserName}/Edit/{id} 
{UserName}/Delete/{id} 

用戶將被路由到用戶控制器的位置。但我還是要保持航線的控制,如:

{Controller}/Edit/{id} 
{Controller}/Delete/{id} 

所以基本上我希望它直接到物理控制器說叫OrdersController的編輯刪除,但如果有人導航到/ JDOE /將其發送給用戶控制器。

我該如何在我的路線中做到這一點?

回答

1

您需要創建多條路線,並讓他們在適當的順序

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

它不是「真的」那麼容易,因爲上面,但是這是它的JIST。您還需要添加RouteConstraint來驗證用戶名。

最後,如果您使用的是用戶名參數,那麼您爲什麼需要該ID?只是一個想法。


旁白:
如果你看一下用戶在此節在計算器上,你會看到路由看起來更像這一點。

  • 用戶/ {ID}/{用戶名}
  • 用戶/ {ID} /編輯
  • 用戶/ {ID} /刪除

我個人認爲,這是一個很大減少工作來實現...但是,嘿,那只是我。

+0

我可能是錯的,我覺得第一條路線將匹配控制器名稱,而不是到達第二條路線,並避免正確的控制器來處理請求。如果我錯了,請糾正。 – codingbiz 2012-07-21 20:56:46

+0

我對我的答案做了一個小小的更新。基本上他需要添加一個[RouteConstraint](http://blogs.planetcloud.co.uk/mygreatdiscovery/post/Custom-route-constraint-to-validate-against-a-list.aspx) – 2012-07-21 21:14:20