2014-04-30 47 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的一部分,而不是查詢的一部分。 –