实现ASP.NET WebAPI版本控制的最佳方法是什么?

时间:2012-05-23 01:12:43

标签: asp.net-web-api

版本WebAPI的最佳方法是什么?

我正在从头开始构建一个API,我想确保它将来会优雅地版本化。我想象的是mysite.com/api/v2 /...

我看到的一种方法是为每个API版本创建一个单独的项目(Web应用程序)。但也许有更好的方法来做到这一点?

感谢您的想法。

2 个答案:

答案 0 :(得分:4)

在网址中包含版本号是我在本文中解释的标准方法(我不重复内容):Implementing versioning a RESTful API with WCF or ASP.Net Web Api

尽管可以,但您无需创建全新的项目。您将面对单个项目的问题是名称会发生​​冲突:

  

/api/v1.0/Car/123

  

/api/v2.0/Car/123

两者都会指向CarController,而您只能拥有其中一个。解决方案是实现您自己的IHttpControllerSelector并注册DependencyResolver。此实现将查看版本号,并可能根据命名空间查找类型。


更新

我不打算在这里引发REST争议。但正如@DarrelMiller指出的那样,这是一个关于同一主题的较早讨论令人沮丧我建议的方法:

How to version REST URIs

个人认为网址版本化是最佳选择。

答案 1 :(得分:3)

您需要创建自己的IHttpControllerSelector实现。最好的方法是将此实现基于Microsoft的IHttpControllerSelector。然后,您可以在IHttpControllerSelector中决定是否要按网址或内容类型进行版本。

最基本的实现直接实现IHttpControllerSelector并且只实现SelectController方法,但性能原因是围绕它实现一些缓存更好。

要查找控制器,您可以使用IHttpControllerTypeResolver简化HttpConfiguration.Services实例。

我使用过这样的东西:http://damsteen.nl/blog/implementing-versioning-in-asp.net-web-api。还在Github上添加了一些代码:https://github.com/Sebazzz/SDammann.WebApi.Versioning