我有一个像这样的控制器
[Route("api/Foo/MyController/{id}")]
public IHttpActionResult Get(int id)
{
//Code code
foo(id); // Foo accept Int or Null
}
如果调用 api / Foo / MyController / 1 ,这确实有效,但我需要调用 api / Foo / MyController 之类的" GetAll"现在参数id为null,并且控制器中的东西全部返回,怎么去?
答案 0 :(得分:7)
您可以添加新方法和路线:
[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
}
}
答案 1 :(得分:3)
为什么不要有两种不同的方法:
[Route("api/Foo/")]
public IHttpActionResult GetAll()
{
// code
}
[Route("api/Foo/{id}")]
public IHttpActionResult GetById(int id)
{
// code
}
为清晰起见(可读性,可维护性,可支持性)。
答案 2 :(得分:1)
您还可以选择参数:
[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);
}
//...
}