gpt4 book ai didi

c# - 如何正确地重载具有多个集合参数的 WebAPI 2 Controller ?

转载 作者:行者123 更新时间:2023-11-30 12:26:02 24 4
gpt4 key购买 nike

我正在尝试使用重载的 Get 方法设计我的 WebAPI Controller ,这些方法将根据用户提供的参数进行选择。在某些情况下,我能够让它正常工作,但是当我在一个方法上有多个集合参数时,即使我没有指定两个集合,我的 Controller 也不再能够选择正确的路由。

例如,以下设置有效:

[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
}

}

选择方法一

获取 http://server/data/stock/?symbols[]=GOOG&symbols[]=MSFT

选择方法二

获取 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

相反,我收到错误:

Multiple actions were found that match the request: Get on type StockDataController Get on type StockDataController

这样可以有多个集合参数吗?如果是这样,我在这里做错了什么?

最佳答案

您的 REST 服务中需要一个可选参数。

只需将您的时间变量用作可空值:DateTime?时间

public IEnumerable<StockDataItem> Get([FromUri] string[] symbols, DateTime? time) {
// Return stock data at a specific time for the provided symbols
}

现在您可以调用您的服务:

获取 http://server/data/stock/?symbols[]=GOOG&symbols[]=MSFT

获取 http://server/data/stock/?symbols[]=GOOG&symbols[]=MSFT&time=2015-01-01

关于c# - 如何正确地重载具有多个集合参数的 WebAPI 2 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30066482/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com