URI中包含不受支持的API版本-怎么了?

时间:2019-02-11 13:08:03

标签: c# rest .net-core api-versioning

我有一个使用 .net core 2.2 的Web API项目(也许有问题。)

这些路由正在等待带有OpenIdDict的OAuth授权,但对我来说完全可以使用。我正在尝试一种非常简单的方法:

startup.cs仅包含:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="select-panel">
  <option value="div1">1</option>
  <option value="div2">2</option>
</select>
<div id="div1" class="subcontent">Text 1</div>
<div id="div2" class="subcontent">Text 2</div>

出于测试目的,API控制器具有三种不同的路由。请注意,控制器本身没有[Route()]或[ApiVersion()]批注。

services.AddApiVersioning();

如果我发出类似的授权请求

[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");
}

.net核心回答BadRequest:

http://localhost:27713/api/v1.0/vt

我想念什么?

2 个答案:

答案 0 :(得分:2)

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

以下是根据您提供的信息提供的可行示例:

[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

答案 1 :(得分:1)

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

Github Issue