如何为我的Web应用程序强制执行url约定?

时间:2016-08-08 14:23:30

标签: asp.net-mvc asp.net-web-api routing

作为架构师,我正在构建的应用程序具有符合REST的url方案,可以准确地表示域,我想要一种方法来强制执行具有以下属性的约定:

  • 成功的陷阱(开发更容易做错而不是做错)
  • 遵循类约定,除非它没有,在这种情况下它是可覆盖的
  • 路由存储在代码库中的集中位置
  • 利用类型系统(强类型控制器操作,而不是检查操作中参数的请求变量)
  • 可版本

根据我的经验,类命名和动作命名约定最终会分崩离析(域模型并不完全遵循对象模型,或者开发人员发现很难调试路由),应用程序还原为属性路由。属性路由有许多缺点,并且可以成为一个狂野的西部环境,其中几个URL样式一起增长。

有什么可以解决这个看似常见的问题?

1 个答案:

答案 0 :(得分:0)

嗯,你正在寻找不存在的第三种选择。传统的路由和属性路由几乎涵盖了所有场景。你使用的只是权衡每个人的利弊。

传统路由是基于约定的方法,因此,如果您正在寻找某些不必考虑的东西,那就是它。默认值为/controller/action格式,但您可以为需要其他内容的特定方案创建其他路由。所有路由都集中在RouteConfig.csHtmlHelperUrlHelper中与路由相关的帮助可以称为强类型:Html.ActionLink<FooController>(m => m.Index(), "Foo")

关于唯一没有从您的列表中删除的项目是&#34;可版本化的&#34;,但我不确定您的预期会如何工作?我的想法立即进入Web Api,并使用v1v2等方式为路由添加前缀。如果这是您正在谈论的内容,您可以轻松地执行此操作传统路由。

如果您想要更灵活的东西,那就是属性路由的来源,实际上,您可以混合搭配传统的路由和属性路由,以获得两全其美的效果。属性路由很少形式化,但这就是重点。

最终,这只是归结为组织内的标准。没有任何编程语言,框架或路由系统可以将您锁定为一种始终如一的方式。如果要进行标准化,则必须强制执行标准化。这就是代码审查,质量保证等等问题。您不应期望一个框架来解决您的制度问题,因为它永远不会。