我最初的问题是我正在寻找在 Restful API 中进行版本控制的最佳实践。没有多少人谈论这个,没有一个好的答案,或者我目前无法找到确切的解决方案。
(1) 起初我想为每个版本Tag
使用http://domain.com/API/ {version}。因此,如果发布了新的 API,我会将其导出并发布到相应的 URL,但似乎很难在一个 Web 应用程序中混合不同版本的源代码。Branch
Tag
(2) 然后我想用这种方式,一个版本一个控制器:(就像这个问题Versioning of REST API Built With ASP.NET MVC 3 - Best Practices)
http://domain.com/API/1.0/{AnAction} => will go to APIV1Controller.{AnAction}
http://domain.com/API/2.0/{AnAction} => will go to APIV2Controller.{AnAction}
但它需要为每个版本编写一个路由。
(3) 第三种方法是我从 PayPal API 获得的想法,即版本不在 URL 中,而是在 POST 参数中。所以 URL 固定为http://domain.com/API/
但用户必须指定Version
参数有"1.0"
or "2.0"
。
解决方案:(2)对我来说没问题,目前我使用这种方式,但我想混合(2)和(3)所以我有一个 APIController,它只有一个索引操作来检查这个Version
参数并传输对相应控制器的请求和操作 APIV1Controller.{AnAction} 或 APIV2Controller.{AnAction}。
在谷歌搜索和 Stackoverflowing 关于如何在没有重定向的情况下传输、调用或调用另一个控制器和操作之后。似乎没有好的答案和好的做法。有人通过简单地创建控制器的新实例来回答不同控制器上的 .NET MVC 调用方法。突然间我想到了怎么办reroute
!
问题:
是否可以reroute
在没有重定向的情况下对另一个控制器和另一个动作执行动作以及如何做到这一点?
或者一个特定的问题,当用户请求http://domain.com/API/{AnAction}
时Version="2.0"
,我该如何reroute
从APIController.Index
to APIV2Controller.{AnAction}
?
我没有使用 IoC。