You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

API版本控制未按预期生效,请求排查配置问题

问题分析与解决方案

你遇到的核心问题是两个版本的HttpGet Action路由模板、请求方法和参数列表完全一致,ASP.NET Core路由系统会将它们视为重复端点,最终只会执行最后定义的GetTestTwo方法,忽略版本筛选逻辑。

解决步骤

1. 区分Action路由或签名

给不同版本的Action设置唯一标识,让框架能正确区分:

方法A:使用ActionName特性

修改Controller代码:

[Route("api/[controller]")]
[ApiVersion("1.0")]
[ApiVersion("2.0")]
[ApiController]
public class TestController : ControllerBase
{
    [HttpGet]
    [MapToApiVersion("1.0")]
    [ActionName("GetTestV1")]
    [Produces("application/vnd.json")]
    public IActionResult GetTest()
    {
            return Ok("Test 1");
    }
 
    [HttpGet]
    [MapToApiVersion("2.0")]
    [ActionName("GetTestV2")]
    [Produces("application/vnd.json")]
    public IActionResult GetTestTwo()
    {
        return Ok("Test 2");
    }
}

方法B:修改路由模板

给不同版本的Action添加专属路由片段:

[HttpGet("v1")]
[MapToApiVersion("1.0")]
[Produces("application/vnd.json")]
public IActionResult GetTest()
{
        return Ok("Test 1");
}
 
[HttpGet("v2")]
[MapToApiVersion("2.0")]
[Produces("application/vnd.json")]
public IActionResult GetTestTwo()
{
    return Ok("Test 2");
}

此时请求URL分别为api/Test/v1和api/Test/v2,同时仍可通过X-Version头指定版本。

2. 规范ApiVersion特性写法

将版本号改为字符串形式,避免double类型隐式转换可能带来的潜在问题:

[ApiVersion("1.0")]
[ApiVersion("2.0")]
// ...
[MapToApiVersion("1.0")]
[MapToApiVersion("2.0")]

3. 验证请求头正确性

确认Postman中请求头X-Version的拼写无误,值为1.0或2.0,无额外空格或特殊字符。

内容的提问来源于stack exchange,提问作者KeithViking

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 03:22:04