为什么会抛出异常,因为发现多个与请求匹配的操作

why exception throws as Multiple actions were found that match the request

我是 ASP.NET MVC 的新手,下面是我的 api 控制器:

// API controller named Movie

[HttpGet]
public JsonResult Get()
{
    ....       
}

[HttpGet]
public JsonResult Get([FromQuery]int id)
{
  ....         
}
[HttpGet]
public JsonResult Get([FromQuery]string title, [FromQuery]string category)
{
  ....         
}

然后当我启动应用程序并路由到 localhost/api/movie/123 时,它抛出了一个异常,即 发现多个与请求匹配的操作

但只有第一个动作方法匹配,因为只有一个参数?

您有路由冲突,因为所有这些操作都映射到同一路由,而路由 table 不知道选择哪个。

每个操作的路由必须是唯一的,以避免路由冲突。

为了 localhost/api/movie/123 匹配 Get(int id) 操作,路由模板需要看起来像

//GET api/movie/123
[HttpGet("{id:int}")]
public JsonResult Get(int id) {
    //....         
}

请注意 [FromQuery] 的删除以及在 id 路由参数

上使用路由约束 {id:int}

第二个动作现在应该不会与第一个动作冲突

//GET api/movie?title=someTitle&category=someCategory
[HttpGet]
public JsonResult Get([FromQuery]string title, [FromQuery]string category) {
    //....         
}

引用Routing to controller actions in ASP.NET Core

引用Routing in ASP.NET Core