1

我很确定我以前做过这件事,但我无法得到这个工作。.net WebApi属性路由与收集参数

我有一个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 

我希望能够调用的东西第二种方法像这样,但是虽然该方法被击中,但ID收集始终为空:

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

我是否缺少明显的东西?

回答

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); 
} 
+0

谢谢!抱歉,延迟标记答案,我生病了。 :( –