将第二个 GET 操作方法添加到 Web api 控制器时,发现多个操作与请求错误匹配
Multiple actions were found that match the request error when adding a second GET action method to web api controller
我目前正在开发 Web API,我正在研究如何在我的控制器中添加一个新方法 FilmsController,它必须执行 LINQ查询只是将相关的 JSON 返回给用户。一切似乎都是正确的,但是当我尝试调用 API 时,出现错误 404。我要调用的 API 是 api/NewFilms,应该是正确的。
这里是 GetNewFilms 里面的方法 FilmsController:
public IQueryable<Film> GetNewFilms()
{
var query = from f in db.Films
orderby f.ReleaseYear descending
select f;
return query;
}
// GET: api/Films
public IQueryable<Film> GetFilms()
{
return db.Films;
}
使用默认路由配置,web api 控制器只允许有一个 GET 操作(没有任何参数)。如果您有多个 GET 操作,您将收到 500 错误消息,如
Multiple actions were found that match the request
如果您需要有多个 GET 操作,您可以为使用属性路由的那些操作显式定义一个路由模式。
public class FilmsController : ApiController
{
[Route("api/Films/NewFilms")]
public IEnumerable<string> GetNewFilms()
{
return new List<string> { "New Film 1","New Film 1"};
}
// GET: api/Films
public IEnumerable<string> GetFilms()
{
return new List<string> { "Film 1","Film 2"};
}
public string GetFilm(int id)
{
return "A single film";
}
}
此外,您可以考虑将 Dto 的 return 类型从 IQueryable
更改为 IEnumerable
(而不是您的 ORM 创建的实体 class)
我目前正在开发 Web API,我正在研究如何在我的控制器中添加一个新方法 FilmsController,它必须执行 LINQ查询只是将相关的 JSON 返回给用户。一切似乎都是正确的,但是当我尝试调用 API 时,出现错误 404。我要调用的 API 是 api/NewFilms,应该是正确的。
这里是 GetNewFilms 里面的方法 FilmsController:
public IQueryable<Film> GetNewFilms()
{
var query = from f in db.Films
orderby f.ReleaseYear descending
select f;
return query;
}
// GET: api/Films
public IQueryable<Film> GetFilms()
{
return db.Films;
}
使用默认路由配置,web api 控制器只允许有一个 GET 操作(没有任何参数)。如果您有多个 GET 操作,您将收到 500 错误消息,如
Multiple actions were found that match the request
如果您需要有多个 GET 操作,您可以为使用属性路由的那些操作显式定义一个路由模式。
public class FilmsController : ApiController
{
[Route("api/Films/NewFilms")]
public IEnumerable<string> GetNewFilms()
{
return new List<string> { "New Film 1","New Film 1"};
}
// GET: api/Films
public IEnumerable<string> GetFilms()
{
return new List<string> { "Film 1","Film 2"};
}
public string GetFilm(int id)
{
return "A single film";
}
}
此外,您可以考虑将 Dto 的 return 类型从 IQueryable
更改为 IEnumerable
(而不是您的 ORM 创建的实体 class)