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

时间:2016-03-04 15:53:26

标签: asp.net asp.net-web-api asp.net-web-api2 attributerouting

我很确定我以前做过这个,但我无法让它发挥作用。

我有一个web api 2控制器,我想有两种方法 一个获取一个ID并返回一个对象 一个获取多个ID并返回一组对象。

所以我有类似的东西:

[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集合总是为null:

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

我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:1)

您只需在参数前添加[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);
}