带有集合参数的 .net WebApi 属性路由

.net WebApi attribute routing with a collection parameter

我非常确定我以前做过这个,但我无法让它工作。

我有一个 web api 2 控制器,我想要两种方法。
一种采用单个 ID 和 returns 一个对象。
一个采用多个 ID 和 returns 一组对象。

所以我有类似的东西:

[RoutePrefix("products/{company}/{dept}")]
public class ProductsController : ApiController
{
    [Route("{id:int}")]
    public async Task<IHttpActionResult> Get(string company, string dept, int id)
    {
         // this method works OK.
         ...
         return this.Ok(product);
    }

    [Route("")]
    public async Task<IHttpActionResult> Get(string company, string dept, IEnumerable<int> ids)
    {
        // ids is always null, so this method fails.
        ...
        return this.Ok(products);
    }
}

我可以很好地调用第一个方法,例如:

/products/foo/bar/1000

我希望能够用这样的方法调用第二个方法,但是尽管该方法被命中,ids 集合始终为空:

/products/foo/bar/?ids=1000&ids=1001&ids=1002

我是不是遗漏了什么明显的东西?

只需要在参数前加上[FromUri]即可。

[Route("")]
public async Task<IHttpActionResult> Get(string company, string dept, [FromUri] IEnumerable<int> ids)
{
    // ids now are filled with data ;)
    ...
    return this.Ok(products);
}