0

我目前正在开发Web API,并且正在计算如何在控制器中添加新方法FilmsController它必须执行一个LINQ查询,然后将相关的JSON返回给用户。一切似乎都是正确的,但是当我尝试调用该API时,出现错误404。我试图调用的API是api/NewFilms,这应该是正确的。当向web api控制器添加第二个GET操作方法时发现与请求错误相匹配的多个操作

这里是方法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; 
    } 
+0

在ASP多种Get方法[网络API路由可能重复的IEnumerable .NET MVC 4](http://stackoverflow.com/questions/12775590/web-api-routing-for-multiple-get-methods-in-asp-net-mvc-4) –

回答

1

在默认路由配置,网络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"; 
    } 
} 

此外,你可以考虑改变你的返回类型从IQueryable到您的DTO(而不是由你的ORM创建的实体类)

+1

它的工作原理,非常感谢你。 – Gab

相关问题