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

如何解决Web API中多个HttpGet方法引发的多端点错误

报错原因

两个标记[HttpGet]的接口路由模板结构完全一致,ASP.NET Core 路由匹配时仅识别URL路径的段结构、段值约束,不会区分路由占位符的参数名。两个接口均为GET请求,路由模板都是{单段字符串参数},请求命中该路径格式时,路由系统无法判定要匹配的Action,就会抛出多端点匹配异常。
另外原代码存在逻辑顺序问题:参数空值校验写在了数据库查询逻辑之后,参数为空时依然会执行一次无效的数据库查询,平白增加性能开销。

推荐解决方案

最符合RESTful设计规范、无歧义的方案是给不同业务含义的接口增加独立的路由前缀,彻底区分路径:

  • 为按类型查询、按导演查询的接口分别设置专属路由段
  • 调整参数校验顺序,把空值判断放到所有业务逻辑最前面
    修正后的代码如下:
// 接口路径:GET /api/[controller]/by-genre/{genreName}
[HttpGet("by-genre/{genreName}")]
public IActionResult GetMoviesByGenre(string genreName)
{
    if (string.IsNullOrWhiteSpace(genreName))
       return NotFound();
    var movies = _applicationDbContext.Movies.Where(m => m.Genres.Any(g => g.Name == genreName)).ToList();
    return Ok(movies);
}

// 接口路径:GET /api/[controller]/by-director/{directorName}
[HttpGet("by-director/{directorName}")]
public IActionResult GetMoviesOfADirector(string directorName)
{
    if (string.IsNullOrEmpty(directorName))
        return NotFound();
    var movies = _applicationDbContext.Movies.Where(m => m.Director.Name.Contains(directorName)).ToList();
    return Ok(movies);
}
可选替代方案

如果不希望增加路径前缀,也可以把路径参数改为查询参数,通过不同的查询参数名区分接口:

// 接口路径:GET /api/[controller]?genreName=xxx
[HttpGet]
public IActionResult GetMoviesByGenre([FromQuery] string genreName)
{
    if (string.IsNullOrWhiteSpace(genreName))
       return NotFound();
    var movies = _applicationDbContext.Movies.Where(m => m.Genres.Any(g => g.Name == genreName)).ToList();
    return Ok(movies);
}

// 接口路径:GET /api/[controller]?directorName=xxx
[HttpGet]
public IActionResult GetMoviesOfADirector([FromQuery] string directorName)
{
    if (string.IsNullOrEmpty(directorName))
        return NotFound();
    var movies = _applicationDbContext.Movies.Where(m => m.Director.Name.Contains(directorName)).ToList();
    return Ok(movies);
}

注意:该方案存在隐忧,如果请求同时传入genreName和directorName两个查询参数,依然会触发多端点匹配异常。如果后续需要支持多条件组合查询,建议合并为同一个Action,接收所有可选查询参数后统一处理筛选逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.12 16:15:51