【问题标题】:Managing routes/Global.asax maintainability管理路线/Global.asax 可维护性
【发布时间】: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


【解决方案1】:

对不起,你在说什么? :P

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

这个单一的路由入口有效地允许你使用任何参数调用 Any 控制器的 Any action 方法。


这是一个更好的解决方案吗?

可能不会。

有什么好的解决办法吗?

是的。但是您需要分享更多路线才能确定。

我们是否应该继续向 Global.asax.cs 添加路由?我们应该给原型开绿灯吗?还是我们应该做点别的?

不,不,是。您需要分享大量路线才能更好地了解情况。

(假设您无法重构现有的路由 URL 以使其更符合逻辑。)

但您可以确保新路由适合默认路由,因此问题不会继续增长,即 {controller}/{action}

【讨论】:

    【解决方案2】:

    我会在外部将路线信息存储在 xml 文件或数据库中,并将其加载到 global.asax 中。我可以添加额外的列/属性来路由示例 url,以便我可以快速搜索它。更不用说,我可以在不重建项目的情况下更新路由信息(当然,如果有新的控制器、视图等,那么就需要将它们打包在一个新的 dll 中)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多