在向web api控制器添加第二个GET操作方法时,发现多个操作与请求错误匹配



我目前正在开发一个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创建的实体类)

最新更新