我正在使用Asp.Net Core作为Rest API服务。我需要进行API版本控制。实际上,在启动时,我设置了以下设置,它可以正常工作,但是当我将其设置为默认版本时,它不起作用。
我可以得到以下结果链接:
services.AddVersionedApiExplorer(
options =>
{
options.GroupNameFormat = "'v'VVV";
options.SubstituteApiVersionInUrl = true;
options.AssumeDefaultVersionWhenUnspecified = true;
options.DefaultApiVersion = new ApiVersion(1, 0);
});
services.AddApiVersioning(
options =>
{
options.ReportApiVersions = true;
options.AssumeDefaultVersionWhenUnspecified = true;
options.DefaultApiVersion = new ApiVersion(1, 0);
})
.AddMvc(
options =>
{
options.RespectBrowserAcceptHeader = true;
})
.AddXmlSerializerFormatters();
在控制器中设置属性,方法如下: 版本1:
[ApiController]
[Route("v{version:apiVersion}/[controller]")]
[ApiVersion("1.0")]
public class UsersController : ControllerBase
{
[HttpGet("log")]
public string Get()
{
return $"{DateTime.Now}";
}
}
版本 2:
[ApiController]
[Route("v{version:apiVersion}/[controller]")]
[ApiVersion("2.0")]
public class UsersController : ControllerBase
{
[HttpGet("log")]
public string Get()
{
return $"{DateTime.Now}";
}
}
我可以得到以下结果链接:
http://localhost:5000/v1/users/log => 状态码:200
http://localhost:5000/v2/users/log => 状态码:200
但是http://localhost:5000/users/log => 状态码:404
如何在版本控制中设置默认API?
感谢大家抽出时间来尝试帮助解释。
/api/values/{id}/subvalues
在没有{id}
参数的情况下正常工作。当你通过 URL 段进行版本控制时,情况也是如此。AssumedDefaultVersionWhenUnspecified
不是为解决这个问题而设计的,这也是为什么通过 URL 段进行版本控制是最不符合 RESTful 方法的另一个例子。需要进行双重路由注册。要过滤 OpenAPI/Swagger 文档生成,可以使用自定义的 IApiDescriptionProvider 或 IOperationFilter(对于 Swashbuckle)。 - Chris Martinez