不支持的 API 版本与 URI 中的版本 — 怎么了?
Unsupported API version with versions within URI — what's wrong?
我有一个使用 .net core 2.2 的 Web API 项目(可能是问题所在。)
路由正在等待 OpenIdDict 的 OAuth 授权,但这对我来说完全没问题。我正在尝试一种非常简单的方法:
startup.cs只包含:
services.AddApiVersioning();
API 控制器有三个不同的路由用于测试目的。请注意,控制器本身没有 [Route()] 或 [ApiVersion()] 注释。
[HttpGet]
[Authorize]
[ApiVersion("2.0")]
[Route("api/v{version:apiVersion}/vt")]
public IActionResult GetVt20()
{
return Ok("2.0");
}
[HttpGet]
[Authorize]
[ApiVersion("1.0")]
[Route("api/v{version:apiVersion}/vt")]
public IActionResult GetVt10()
{
return Ok("1.0");
}
如果我做一个像
这样的授权请求
http://localhost:27713/api/v1.0/vt
.net 核心用 BadRequest 回答:
{"error":{"code":"UnsupportedApiVersion","message":"The HTTP resource that matches the request URI 'http://localhost:27713/api/v1.0/vt' does not support the API version '1.0'.","innerError":null}}
我错过了什么?
您使用的是最新版本的库吗?您使用的是 Endpoint Routing 还是 Legacy Routing?您的其余配置是什么样的?由于您提供的信息有限,我看不出它不起作用的直接原因。
这是一个基于您提供的信息的工作示例:
[ApiController]
public class VTController : ControllerBase
{
[HttpGet]
[ApiVersion( "1.0" )]
[Route( "api/v{version:apiVersion}/[controller]" )]
public IActionResult Get( ApiVersion apiVersion ) =>
Ok( new { Action = nameof( Get ), Version = apiVersion.ToString() } );
[HttpGet]
[ApiVersion( "2.0" )]
[Route( "api/v{version:apiVersion}/[controller]" )]
public IActionResult GetV2( ApiVersion apiVersion ) =>
Ok( new { Action = nameof( GetV2 ), Version = apiVersion.ToString() } );
}
以下路由按预期解析:
http://localhost/api/v1/vt
http://localhost/api/v2/vt
我在从 2.1 net core 迁移到 2.2 时遇到了同样的问题
只需添加到您的控制器 class [ApiController] 属性
我有一个使用 .net core 2.2 的 Web API 项目(可能是问题所在。)
路由正在等待 OpenIdDict 的 OAuth 授权,但这对我来说完全没问题。我正在尝试一种非常简单的方法:
startup.cs只包含:
services.AddApiVersioning();
API 控制器有三个不同的路由用于测试目的。请注意,控制器本身没有 [Route()] 或 [ApiVersion()] 注释。
[HttpGet]
[Authorize]
[ApiVersion("2.0")]
[Route("api/v{version:apiVersion}/vt")]
public IActionResult GetVt20()
{
return Ok("2.0");
}
[HttpGet]
[Authorize]
[ApiVersion("1.0")]
[Route("api/v{version:apiVersion}/vt")]
public IActionResult GetVt10()
{
return Ok("1.0");
}
如果我做一个像
这样的授权请求http://localhost:27713/api/v1.0/vt
.net 核心用 BadRequest 回答:
{"error":{"code":"UnsupportedApiVersion","message":"The HTTP resource that matches the request URI 'http://localhost:27713/api/v1.0/vt' does not support the API version '1.0'.","innerError":null}}
我错过了什么?
您使用的是最新版本的库吗?您使用的是 Endpoint Routing 还是 Legacy Routing?您的其余配置是什么样的?由于您提供的信息有限,我看不出它不起作用的直接原因。
这是一个基于您提供的信息的工作示例:
[ApiController]
public class VTController : ControllerBase
{
[HttpGet]
[ApiVersion( "1.0" )]
[Route( "api/v{version:apiVersion}/[controller]" )]
public IActionResult Get( ApiVersion apiVersion ) =>
Ok( new { Action = nameof( Get ), Version = apiVersion.ToString() } );
[HttpGet]
[ApiVersion( "2.0" )]
[Route( "api/v{version:apiVersion}/[controller]" )]
public IActionResult GetV2( ApiVersion apiVersion ) =>
Ok( new { Action = nameof( GetV2 ), Version = apiVersion.ToString() } );
}
以下路由按预期解析:
http://localhost/api/v1/vt
http://localhost/api/v2/vt
我在从 2.1 net core 迁移到 2.2 时遇到了同样的问题 只需添加到您的控制器 class [ApiController] 属性