【发布时间】:2015-05-06 10:58:26
【问题描述】:
我正在尝试使用重载的 Get 方法设计我的 WebAPI 控制器,这些方法将根据用户提供的参数进行选择。在某些情况下,我可以让它正常工作,但是当我在一个方法上有多个集合参数时,我的控制器不再能够选择正确的路由,即使我没有指定两个集合。
例如以下设置有效:
[RoutePrefix("data/stock")]
public class StockDataController
: ApiController {
private readonly IDataProvider<StockDataItem> _dataProvider;
public StockDataController() {
_dataProvider = new StockDataProvider();
}
[Route("")]
public IEnumerable<StockDataItem> Get([FromUri] string[] symbols) {
// Return current stock data for the provided symbols
}
[Route("")]
public IEnumerable<StockDataItem> Get([FromUri] string[] symbols, DateTime time) {
// Return stock data at a specific time for the provided symbols
}
}
选择方法 1
获取http://server/data/stock/?symbols[]=GOOG&symbols[]=MSFT
选择方法2
获取http://server/data/stock/?symbols[]=GOOG&symbols[]=MSFT&time=2015-01-01
一旦我添加了以下重载,那么一切都会崩溃:
[Route("")]
public IEnumerable<dynamic> Get(
[FromUri] string[] symbols, [FromUri] string[] fields) {
// Return specified stock data fields for the specified symbols
}
我希望以下请求选择方法 3:
获取http://server/data/stock/?symbols[]=GOOG&symbols[]=MSFT&fields[]=Price&fields[]=Volume
相反,我收到了错误:
找到多个与请求匹配的操作:获取类型 StockDataController 获取 StockDataController 类型
这种方式可以有多个集合参数吗?如果是这样,我在这里做错了什么?
【问题讨论】:
-
您是否尝试过删除
RoutePrefix,然后将特定路由添加到操作(data/stock/{symbols}和data/stock/{symbols}/{fields})?
标签: c# asp.net rest asp.net-web-api