将第二个 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)