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 
} 

为了清晰起见(可读性,可维护性,可支持性)。