ASP.Net MVC:与路由

问题描述:

重写我想下面的URI映射:ASP.Net MVC:与路由

/admin/controller/action/id 

以下几点:

Controller -> Controller 
Action  -> Admin_Action 

例如:

/admin/Users/Create 

Controller -> Users 
Action -> Admin_Create 

/admin/Users/Delete/1 

Controller -> Users 
Action -> Admin_Delete(1) 

我能做到使用路由规则?

我认为以下路由映射应该工作...

routes.MapRoute("YourRouteName", "admin/controller/action/{id}", new { controller = "Controller", action = "Admin_Action", id = UrlParameter.Optional }); 
+0

对不起,我不认为我的问题是明确的。我的意思是行动应该与管理员之前,当管理员在URI 。(现在在我的问题中) –

+1

在这种情况下,我会建议创建另一个控制器“AdminController”,即在路由映射中存在“admin/..”时使用。另外看看使用“区域”功能...你应该避免创建脂肪控制器,主要从可维护性的角度来看 – brodie

+0

真棒,感谢评论。我将检查区域功能。我确实认为这实际上是我想要做的答案:) –

使用此:

routes.MapRoute("Admin", // Route name 
    "admin/{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Controller", action = "Admin_Action", id = UrlParameter.Optional } // Parameter defaults 
); 

但是,如果你愿意,你也可以做 www.example.com/admin/

routes.MapRoute(
    "Default",            
    "admin/{controller}/{action}/{id}",      
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

更新

routes.MapRoute(
    "AdminArea",            
    "admin/{controller}/{action}/{id}",      
    new { controller = "Users", action = "Index", id = UrlParameter.Optional } 
); 
+0

对不起,我刚刚意识到我的问题并不清楚。我已经正确编辑它。 –

+0

只需将控制器名称更改为用户即可更新。 –

如我在this answer中所述,您可以将名称预先命名为使用RouteHandler的操作。

如果您创建一个名为RouteHandler到AdminHandler前面加上“Admin_`到你的行动,那么你可以定义你的路线如下:

routes.MapRoute("Admin", // Route name 
    new Route("admin/{controller}/{action}/{id}", 
    new RouteValueDictionary( 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional }), 
     new AdminHandler() 
    ) 
); 

不过,我同意布罗迪,你应该把所有管理行为一个单独的区域,因为它是一个更好的设计,并使安全和维护更容易。