2012-07-21 117 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