Sae*_*aei 2 .net versioning asp.net api asp.net-core
我使用 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();
Run Code Online (Sandbox Code Playgroud)
并在控制器中设置属性,如下所示:版本 1:
[ApiController]
[Route("v{version:apiVersion}/[controller]")]
[ApiVersion("1.0")]
public class UsersController : ControllerBase
{
[HttpGet("log")]
public string Get()
{
return $"{DateTime.Now}";
}
}
Run Code Online (Sandbox Code Playgroud)
版本 2:
[ApiController]
[Route("v{version:apiVersion}/[controller]")]
[ApiVersion("2.0")]
public class UsersController : ControllerBase
{
[HttpGet("log")]
public string Get()
{
return $"{DateTime.Now}";
}
}
Run Code Online (Sandbox Code Playgroud)
我可以将结果作为流动网址:
http://localhost:5000/v1/users/log => 状态码:200
http://localhost:5000/v2/users/log => 状态码:200
但是http://localhost:5000/users/log => 状态码:404
如何在版本控制中设置默认 API?
谢谢,大家花时间尝试并帮助解释
如果没有指定,您的配置会正确设置默认 api 版本。但是您的路线需要请求 url 来包含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}";
}
}
Run Code Online (Sandbox Code Playgroud)
现在 request tohttp://localhost:5000/users/log将指向带有 api version 的控制器1.0。如果将此路由添加到第二个控制器,1.0则仍将选择版本,因为ApiVersion将选择默认值并且它是1.0.
| 归档时间: |
|
| 查看次数: |
2013 次 |
| 最近记录: |