我正在使用该aspnet-api-versioning
库创建一个相当简单的版本控制策略,使用名称空间/文件夹来指定路由。我的启动代码如下所示:
services.AddApiVersioning(options =>
{
options.AssumeDefaultVersionWhenUnspecified = true;
options.ReportApiVersions = true;
options.Conventions.Add(new VersionByNamespaceConvention());
});
我的控制器通常如下所示:
namespace Something.Api.V1_0.Controllers
{
[ApiController]
[Route("[controller]")]
[Route("v{version:apiVersion}/[controller]")]
public class MessageController : ControllerBase
{
[HttpGet]
public IActionResult Get()
{
var formattedVersion = GetApiVersionString(HttpContext.GetRequestedApiVersion());
var message = $"V1: It is Get in v1 controller (version {formattedVersion}).";
return Ok(message);
}
[HttpGet]
[Route("specific-route")]
public IActionResult SpecificRoute()
{
var formattedVersion = GetApiVersionString(HttpContext.GetRequestedApiVersion());
var message = $"V1: It is specific route (version {formattedVersion}).";
return Ok(message);
}
}
}
不要关注GetApiVersionString()
,它只是格式化版本字符串的私有方法。
此设置允许我将以下路由发送到此控制器的“特定路由”方法:
/Message/specific-route
(这是为不知道版本控制的客户准备的)/v1/Message/specific-route
(匹配 1.0)/v1.0/Message/specific-route
理想情况下,我想消除其中的第二个,并要求所有指定版本的调用都指定主要版本和次要版本。换句话说,我希望对“v1”调用的响应与对任何未定义版本的调用相同。这个库是否提供任何技术来实现这一点?
注意:我所有的命名空间/文件夹都将遵循该V_x
格式,因此我的方案中总会有一个次要版本。