带有集合参数的 .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);
}
我非常确定我以前做过这个,但我无法让它工作。
我有一个 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);
}