我目前正在开发一个Web API,我正在研究如何在我的控制器中添加一个新方法FilmsController,该方法必须执行LINQ查询,只需向用户返回相关的JSON。一切似乎都是正确的,但当我尝试调用那个API时,会出现错误404。我尝试调用的API是API/NewFilms,这应该是正确的。
以下是FilmsController内部的方法GetNewFilms:
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错误,消息类似
发现多个操作与请求匹配
如果需要有多个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的IQueryable
更改为IEnumerable
(而不是ORM创建的实体类)