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

.NET 6 同一控制器类中区分不同Get路由的最佳方法

同控制器下区分两个GET平级路由的最佳实现

你的场景中两个GET接口为平级路径:

  • 原有接口:GET /api/test
  • 新增接口:GET /api/test-abc
    类级别已经定义了[Route("api/[controller]")]路由前缀,这种情况下侵入性最小、无路由冲突的方案是给新增方法直接指定绝对路由,跳过类级别路由前缀的拼接。

具体实现代码

[ApiController]
[Route("api/[controller]")]
public class TestController : ControllerBase
{
    // 原有方法无需修改,正常匹配 GET /api/test
    [HttpGet]
    public IActionResult Get()
    {
        return Ok("默认接口返回值");
    }

    // 新增GET方法,~/开头表示绝对路由,直接匹配 GET /api/test-abc
    [HttpGet("~/api/test-abc")]
    public IActionResult GetAbc()
    {
        return Ok("test-abc路径接口返回值");
    }
}

方案优势

  • 零侵入:完全不需要修改原有接口的路由配置,线上已有/api/test的调用不会受任何影响
  • 无歧义:两个接口的路由模板完全独立,路由系统不会出现匹配冲突,不需要额外配置路由顺序、参数约束就能精准命中对应方法
  • 易维护:方法上的路由标记直接写死完整路径,后续排查接口路径时不需要来回拼接类、方法两级的路由片段计算

需要避开的错误写法

  • 不要给新增方法写相对路由[HttpGet("test-abc")]:这种写法会和类级别前缀拼接,最终匹配路径是/api/test/test-abc,不符合路径要求
  • 不要修改类级别的[controller]占位符适配:[controller]是约定式路由的占位符,硬改控制器名、加自定义占位符适配会破坏整个控制器的原有路由约定
  • 不要靠参数约束区分同路径方法:两个接口本身路径就不同,没必要给原有方法加多余的参数约束制造逻辑复杂度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:01:01