0

我有這樣的WebAPI控制器GETALL或得到一些標識

[Route("api/Foo/MyController/{id}")] 
public IHttpActionResult Get(int id) 
{ 
    //Code code 
    foo(id); // Foo accept Int or Null 
} 

該做的工作控制器,如果在呼叫API /美孚/ myController的/ 1,但我需要調用API /美孚/ myController的喜歡它「GetAll」參數ID現在是空的,東西進入控制器返回所有,怎麼去那裏?

回答

0

你也可以做一個可選的參數:

[Route("api/Foo/MyController/{id}")] 
public IHttpActionResult Get(int? id = null) 
{ 
    IQueryable foo = GetData(); 
    if (id.HasValue) 
    { 
     foo = foo.Where(e => e.Id == id.Value); 
    } 
    //... 
} 
3

您可以添加新的方法和途徑:

[Route("api/Foo/MyController")] 
public IHttpActionResult Get() 
{ 
    //Code code 
} 

編輯:重複使用相同的方法,你可以使用可選參數:

[Route("api/Foo/MyController/{id}")] 
    public IHttpActionResult Get(int? id) 
    { 
     if (id.HasValue) 
     { 
      // get by id 
     } 
     else 
     { 
      // get all 
     } 
    } 
+0

+1爲答案。當然,但我認爲,存在某種方式包括在同一個Get,而不是另一個Get。問候 –

+1

@nimeshjm在這裏絕對正確。您可以使用默認值並將所有內容合併到一個API中,但更常見的是將兩者分開(特別是因爲檢索數據的代碼塊將不同)。 – ipshing

1

爲什麼沒有2種獨立的方法:

[Route("api/Foo/")] 
public IHttpActionResult GetAll() 
{ 
    // code 
} 

[Route("api/Foo/{id}")] 
public IHttpActionResult GetById(int id) 
{ 
    // code 
} 

爲了清晰起見(可讀性,可維護性,可支持性)。