【发布时间】:2016-11-13 06:48:29
【问题描述】:
在之前的asp.net web api 中,我实现了DefaultHttpControllerSelector 来指定我希望请求如何定位我的控制器。我经常有不同名称的不同控制器,但用于相同的进程。唯一的区别是一个版本比另一个版本高。
例如,我可以有一个名为 BookingV1Controller 的控制器,用于处理服务的版本一。我也会有BookingV2Controller,它旨在处理服务的第二版。然后,客户端应用程序将使用此 URL http://myservice.com/api/v2/booking/someaction?id=12 向服务发出请求。为了处理请求,我将提供DefaultHttpControllerSelector 的自定义实现,以根据请求的版本选择所需的控制器的适当版本。
但是,我似乎没有办法在 ASP.NET Core 中执行此操作。我到处搜索都无济于事。也没有可以提供帮助的文档。
如果有人可以在这里帮助我,我将不胜感激。谢谢。
更新
如果在自定义标头中指定了版本,我还想知道该怎么做。例如X-Version:v1
更新 2
要求是服务的版本不应在 URL 中公开。如果不存在版本,则服务将返回有关如何添加版本的说明。如果请求的控制器不存在于请求的版本中,系统将搜索较低的版本。如果它在任何较低版本中找到它,它就会使用它。这样做的原因是为了防止在所有版本上重复控制器。但是对于 ASP.NET Core,这可能是不可能的。
【问题讨论】:
-
使用标头进行版本控制可能不是最好的方法。没有发送标头时会发生什么 - 它会默认为 v1 还是最新版本(或错误)?测试有多容易?
-
@Evan Mulawski,要求版本不应在 URL 中公开。如果不存在版本,则服务将返回有关如何添加版本的说明。如果请求的控制器不存在于请求的版本中,系统将搜索较低的版本。如果它在任何较低版本中找到它,它就会使用它。这样做的原因是为了防止在所有版本上重复控制器。但是对于 ASP.NET Core,这可能是不可能的。
标签: c# asp.net asp.net-web-api asp.net-core