WebAPI控制器GetAll或获取一些ID

时间:2017-07-25 21:52:09

标签: c# asp.net-web-api asp.net-web-api2 asp.net-web-api-routing

我有一个像这样的控制器

[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,并且控制器中的东西全部返回,怎么去?

3 个答案:

答案 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);
    }
    //...
}