默认路由正常
mysite.com/home/about
我甚至看到如何自定义它以缩短
所以我可以说:
mysite.com/edit/1 代替 mysite.com/home/edit/1
但是如何让它更长时间来处理url,如下所示
mysite.com/admin/user/1 //工作
mysite.com/admin/user/details //不起作用
mysite.com/admin/question/create //不起作用
我不能把id视为一个动作?我需要一条自定义路线?
我是否需要为每个表创建新的控制器,或者我可以通过管理控制器
进行所有控制非常感谢
答案 0 :(得分:2)
正如已经提到的,最好的选择可能是使用新的Areas功能
您可以在没有区域的情况下实现此类路由,但随着控制器数量的增加,站点的可维护性将会降低。基本上,您所做的是将控制器名称硬编码到Route定义中,这意味着您必须为每个新的Admin控制器添加新的路由映射。以下是一些如何在没有区域的情况下设置路线的示例。
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
}
}
答案 1 :(得分:1)
向global.asax添加路由非常简单。将更具体的路线放在更一般的路线上方。控制器/动作/参数/参数最典型的模式......如果你需要更复杂的东西,你可能想看一下MVC区域。在上面的例子中,“mysite.com/admin/user/details”正在寻找一个名为“admin”的控制器和名为“user”的操作,其后的所有内容都是action方法的参数(假设是典型的路径设置)