通过控制器名称完成路由(除非为每个控制器/操作设置路由),我看到使用ApiVersion属性使版本化API使用相同的控制器名称但在不同的命名空间中的唯一好处。
否则我找到的正确用法是:
[ApiVersion("2.0"]
[RoutePrefix("api/v{version:apiVersion}/test")]
如果必须全面应用,我认为没有任何效率或生产效益,放弃包装并简单地使用它没有区别:
[RoutePrefix("api/v2.0/test")]
我只能假设我在这里遗漏了一些明显的东西。
答案 0 :(得分:0)
这里有好处的洗衣清单;这里列出的太多了。这是尝试涵盖一些最常见的高级好处的方法:
API版本是一类类型,而不是 magic 字符串。 2.0
和2
在语义上是等效的;因此,api/v2.0/test
和api/v2/test
是相同的资源。
您不必不必使用属性。这是应用API版本的几种方法之一。您还可以使用惯例。
有一个内置的约定,支持从包含的源代码名称空间派生的隐式API版本。
支持多种版本控制样式(查询字符串,URL段,标题,媒体类型),或者您可以插入自己的方法。
API版本到方法的映射。单个控制器可能支持多个API版本,这称为版本交织。您可以在定义单个路由模板的同时映射要在单个控制器类型上调用的不同操作方法。 (例如:1.0
可能会映射到GetV1
,而2.0
可能会映射到GetV2
)。
API版本 advertisement ,该方法可让您通知客户每个API支持和/或弃用了哪些API版本。
API Explorer支持,可按版本整理您的API,并与Swagger / OpenAPI文档等配合使用。