ASP.Net MVC: переписывание с маршрутизацией - PullRequest
4 голосов
/ 07 октября 2011

Я хочу сопоставить следующий URI:

/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)

Можно ли добиться этого с помощьюправила маршрутизации?

Ответы [ 3 ]

6 голосов
/ 07 октября 2011

Я думаю, что следующее отображение маршрута должно работать ...

 routes.MapRoute("YourRouteName", "admin/controller/action/{id}", new { controller = "Controller", action = "Admin_Action", id = UrlParameter.Optional });
1 голос
/ 07 октября 2011

Вы можете добавить имена к действиям, используя 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() 
    ) 
);  

Тем не менее, я согласен с Броди, что вы должны размещать все действия администратора в отдельной области, так как это лучший дизайн и упрощает безопасность и обслуживание.

1 голос
/ 07 октября 2011

Используйте это:

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 } 
);
...