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

ASP.NET Core 2 Web API路由问题:第二个方法被路由至第一个方法

问题分析与解决方案

你遇到的问题核心是第二个Get方法的路由模板写错了,导致请求无法正确匹配到它,反而被路由到了第一个无参数的Get方法。

具体问题点

看你的第二个方法的路由特性:

[HttpGet("searchstring:aplha")]

这里有两个关键错误:

  1. 拼写错误:aplha应该是alpha(字母顺序写错了);
  2. 路由模板语义错误:这个写法会被ASP.NET Core解析为固定的路径片段——也就是说只有当你的请求路径是api/hospital/searchstring:aplha时才会匹配这个方法。但你大概率是想通过查询参数(比如api/hospital?searchstring=xxx)或者路径参数(api/hospital/xxx)来传递searchstring,这个模板完全不符合你的需求。

正确的写法方案

根据你的需求,分两种场景给出正确配置:

场景1:通过查询参数传递searchstring

如果你希望通过api/hospital?searchstring=xxx这样的请求来调用第二个方法,可以给它一个明确的路由标识(避免和无参数Get冲突),同时确保参数绑定正确:

[Route("api/[controller]")]
public class HospitalController : Controller
{  
    [HttpGet]
    public IActionResult Get()
    {
        return new ObjectResult("");
    }

    // 给这个方法加一个路由前缀,比如"search"
    [HttpGet("search")]
    public IActionResult Get([FromQuery] string searchstring)
    {
       return new ObjectResult(searchstring);
    }

    [HttpGet("{Id:int}")]
    public IActionResult Get(int Id)
    {
        return new ObjectResult(Id);
    }
}

此时请求api/hospital/search?searchstring=test就会正确匹配第二个方法。

场景2:通过路径参数传递searchstring

如果你希望通过api/hospital/test这样的路径来传递字符串参数,需要修正路由模板的拼写和格式:

[Route("api/[controller]")]
public class HospitalController : Controller
{  
    [HttpGet]
    public IActionResult Get()
    {
        return new ObjectResult("");
    }

    // 修正拼写为alpha,并使用正确的路径参数模板
    [HttpGet("{searchstring:alpha}")]
    public IActionResult Get(string searchstring)
    {
       return new ObjectResult(searchstring);
    }

    [HttpGet("{Id:int}")]
    public IActionResult Get(int Id)
    {
        return new ObjectResult(Id);
    }
}

此时:

  • api/hospital/abc会匹配第二个方法(因为abc符合alpha约束,只能是字母);
  • api/hospital/123会匹配第三个方法(符合int约束);
  • api/hospital会匹配第一个方法。

额外说明

ASP.NET Core的路由匹配是有优先级的:带有约束的路由(比如{Id:int}、{searchstring:alpha})会比无约束的路由优先级高,同时固定路径片段的路由也会优先于模糊匹配的路由。只要你的路由模板正确,就能避免匹配歧义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:12:00