4

我有一个使用.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}}

我错过了什么?

4

2 回答 2

3

您使用的是最新版本的库吗?您使用的是端点路由还是传统路由?您的其余配置是什么样的?由于您提供的信息有限,我看不出它不起作用的直接原因。

这是基于您提供的信息的工作示例:

[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
于 2019-04-25T19:55:18.560 回答
3

从 2.1 网络核心迁移到 2.2 时我遇到了同样的问题只需添加到您的控制器类 [ApiController] 属性

Github问题

于 2019-04-26T11:09:35.420 回答