【发布时间】:2018-04-22 12:17:07
【问题描述】:
我们正在使用aspnet-api-version 为我们的 API 提供版本。虽然库允许在一个控制器上使用interleaving multiple version implementation。
[ApiVersion( "2.0" )]
[ApiVersion( "3.0" )]
[RoutePrefix( "api/helloworld" )]
public class HelloWorld2Controller : ApiController
{
[Route]
public string Get() => "Hello world v2.0!";
[Route, MapToApiVersion( "3.0" )]
public string GetV3() => "Hello world v3.0!";
}
我们希望将特定于版本的控制器分开。
我看到的版本特定控制器和使用这个库的问题是我们必须再次重新实现所有 API 方法,无论它们是否已更改。考虑这个例子
[RoutePrefix("api/v{version:apiVersion}/values")]
[ApiVersion( "1.0" )]
public class ValuesController : ApiController
{
// GET api/values
[Route]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/values/5
[Route("{id:int}")]
[Route, MapToApiVersion( "1.0" )]
public string Get(int id)
{
return id.ToString();
}
}
[RoutePrefix("api/v{version:apiVersion}/values")]
[ApiVersion( "2.0" )]
public class ValuesControllerV2 : ValuesController
{
// GET api/values/5
[Route("{id:int}")]
[Route, MapToApiVersion( "2.0" )]
public string Get(int id)
{
return id.ToString();
}
}
V1 api(使用ValuesController)定义了两个API函数Get和Get(ById)。但是 v2 api ValuesControllerV2 虽然覆盖了 Get(ById),但它必须重新实现或调用 Get 的基本方法才能使 Get API 在 V2 上可用。
有没有更好的策略,我们不必为所有在 API 升级时保持不变的函数重新实现或编写传递。
【问题讨论】:
标签: asp.net asp.net-mvc api asp.net-web-api api-versioning