【发布时间】:2015-07-16 16:49:06
【问题描述】:
对于如何在 MVC 中最好地定义和组织路由,是否有任何最佳实践?
我工作的公司经营着一个非常广泛、复杂的电子商务网站,每天有大约 60 万的独立访问者。
问题出在这里:在我们的 Global.asax.cs 中,我们的RegisterRoutes() 中有大约 75 个路由定义的庞大列表:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
除了在 Global.asax.cs 中有这个巨大的列表之外,还有更好的方法来定义这些路由吗?
因为我们有很多开发人员,其中一半不称职,我无法回去重构这些路由,因此可能需要几分钟才能弄清楚哪个控制器负责提供 URL 的视图。
我能做什么?
一位开发人员辛勤地构建了一个原型,允许我们在 Global.asax.cs 中执行此操作:
public static void RegisterRoutes(RouteCollection routes)
{
routes.Include(new RootController());
routes.Include(new AccountController());
routes.Include(new HelpController());
routes.Include(new SearchController());
// etc., for each controller
}
在这个原型中,Include() 是一个扩展方法,所有控制器都继承自 IRoutedController,它提供了 Include() 一个 IEnumerable<Route> 列表 Routes 以添加到 RouteCollection。
但是对于这个原型,我们遇到了一个新问题:不是通过查看route.MapRoute() 调用列表来查找特定 URL 调用的控制器,我们现在必须猜测哪个控制器负责特定 URL 并检查其IRoutedController 路由列表,以查看 URL 是否实际调用了我们猜测的控制器。没那么难,但有时只需检查我们在 Global.asax.cs 中的 75+ Routes 列表。
这是一个更好的解决方案吗?
有没有任何好的解决方案?
我们是否应该继续向 Global.asax.cs 添加路由?我们应该给原型开绿灯吗?还是我们应该做点别的? (假设您无法重构现有路由 URL 以使其更符合逻辑。)
【问题讨论】:
-
你说“他们中有一半是智障”。另一半呢?
标签: asp.net-mvc routes