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

时间:2016-05-14 21:44:32

标签: asp.net-mvc asp.net-web-api asp.net-web-api2 asp.net-routing

我目前正在开发一个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;
    }

1 个答案:

答案 0 :(得分:1)

使用默认路由配置,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创建的实体类)