2014-04-30 48 views
0

我对Web API完全陌生,并不理解如何过滤获取调用。理解Get方法覆盖

此方法返回我的数据库中的所有项目。

// GET: api/LogEntries 
public IQueryable<LogEntry> GetLogEntries() 
{ 
    return db.LogEntries; 
} 

此方法返回数据库中的特定项目。

// GET: api/LogEntries/5 
    [ResponseType(typeof(LogEntry))] 
    public IHttpActionResult GetLogEntry(int id) 
    { 
     LogEntry logEntry = db.LogEntries.Find(id); 
     if (logEntry == null) 
     { 
      return NotFound(); 
     } 

     return Ok(logEntry); 
    } 

所以现在我想,所以我创造了这个方法来筛选返回的记录,但它不会工作,因为特定的项目方法被调用。我似乎错过了一个概念,希望你能指出我更清楚的理解。由于

// GET: api/LogEntries 
public IQueryable<LogEntry> GetLogEntries(string levelID) 
{ 
    int levIdInt; 
    if (Int32.TryParse(levelID, out levIdInt)) 
    { 
     return db.LogEntries.Take(300).Where(l => (int)l.Level == levIdInt).OrderByDescending(d => d.TimeStamp); 

    } 

    return db.LogEntries.Where(i => i.ID < 0); 

} 

回答

1

你需要指定该方法的路线

[Route("api/LogEntries/Level/{levelID}"] 
public IQueryable<LogEntry> GetLogEntries(string levelID) 
{} 

更多关于路由可以在这里http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2

+1

您也可以访问此API(不添加任何路由)使用: /api/LogEntries?levelId = TheLevel 添加路由允许您以不同方式调整API的形状,并使数据成为url的一部分,而不是查询的一部分。 –