Как уже упоминалось, вероятно, вам лучше всего использовать новую функцию Области
Вы можете достичь этого типа маршрутизации без Области, но с увеличением количества контроллеров обслуживание вашего сайта будет уменьшаться. По сути, вы должны жестко закодировать имя контроллера в определение маршрута, что означает, что вам нужно добавлять новые сопоставления маршрутов для каждого нового контроллера администратора. Вот несколько примеров того, как вы можете настроить маршруты без областей.
routes.MapRoute("AdminQuestions", // Route name
"admin/question/{action}/{id}", // URL with parameters
new { controller = "AdminQuestion", action = "Index" } // Parameter defaults
);
routes.MapRoute("AdminUsers", // Route name
"admin/user/{action}/{id}", // URL with parameters
new { controller = "AdminUser", action = "Index" } // Parameter defaults
);
В качестве альтернативы вы могли бы маршрутизировать все через контроллер администратора, но это быстро стало бы очень запутанным, когда действия вашего контроллера выполняли несколько ролей.
routes.MapRoute("Admin", // Route name
"admin/{action}/{type}/{id}", // URL with parameters
new { controller = "Admin", action = "Index" } // Parameter defaults
);
С вашими действиями AdminController, похожими на:
public virtual ActionResult Create(string type, int id)
{
switch (type)
{
case 'question':
// switch/case is code smell
break;
case 'user':
// switch/case is code smell
break;
// etc
}
}