WebAPI 控制器 GetAll 或 Get some Id

WebAPI Controller GetAll or Get some Id

我有这样的控制器

[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,controller里的东西return全部,怎么去?

您可以添加新方法和路由:

[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
        }
    }

你也可以做一个可选参数:

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

为什么没有 2 个单独的方法:

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

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

为了清楚起见(可读性、可维护性、可支持性)。