我将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
如何在Versioning中设置默认API?
感谢大家花时间尝试并帮助解释
答案 0 :(得分:0)
如果未指定默认api版本,则您的配置正确设置了默认api版本。但是您的路线要求请求网址包含v{version}
部分。因此,一种可能的解决方案是添加不带v{version}
的另一条路线
[ApiController]
[Route("v{version:apiVersion}/[controller]")]
[Route("/[controller]")]
[ApiVersion("1.0")]
public class UsersController : ControllerBase
{
[HttpGet("log")]
public string Get()
{
return $"{DateTime.Now}";
}
}
现在对http://localhost:5000/users/log
的请求将指向api版本为1.0
的控制器。如果将此路由添加到第二个控制器,则仍将选择版本1.0
,因为将选择默认ApiVersion
,并且它的名称为1.0
。