【发布时间】:2018-05-29 04:39:26
【问题描述】:
我已经构建了一个 90% 功能的 Web API。我遇到的问题是如何使用 Web API 接受 jQuery 样式数组编码的参数。这是我的 GET 请求:
GET /api/v1/Trades?take=3&skip=0&page=1&pageSize=3&sort%5B0%5D%5Bfield%5D=tradeName&sort%5B0%5D%5Bdir%5D=asc
未编码,请求如下所示:
GET /api/v1/Trades?take=3&skip=0&page=1&pageSize=3&sort[0][field]=tradeName&sort[0][dir]=asc
这种风格与 jQuery 的 $.param 方法序列化请求的方式是一致的。我如何接受它作为 Web API 中的参数?我尝试了以下方法:
[System.Web.Http.HttpGet]
[System.Web.Http.Route("api/v1/Trades")]
public IHttpActionResult GetTrades(int page = -1, int pageSize = -1, int skip = -1, int take = -1, string[,] sort = null)
{
// Do stuff ...
}
在这种情况下,我的方法收到 500 错误并显示以下消息:
“FormatterParameterBinding”不支持可选参数“sort”。
我也试过这个:
public IHttpActionResult GetTrades(string[,] sort, int page = -1, int pageSize = -1, int skip = -1, int take = -1)
{
// Do stuff ...
}
使用这个,我的方法被调用,但排序总是null。我也尝试过更通用的方法,如下所示:
public IHttpActionResult GetTrades(object sort, int page = -1, int pageSize = -1, int skip = -1, int take = -1)
{
// Do stuff ...
}
再一次,我的方法被调用了,但排序总是null。
任何建议都会有所帮助!
【问题讨论】:
-
@CaiusJard - 这不一样。我没有尝试传入多维数组,也没有尝试将其传递给 MVC 控制器。我正在尝试传入一个不同的 jQuery 样式数组。您发布的副本中的解决方案对我不起作用。另外,我不想将它传递给 MVC 控制器。我正在尝试将其传递给 Web API 控制器。
-
您坚持认为为 MVC 控制器提供的解决方案无法适应您的情况,因此我撤回了我的赞成票。与 Web API 路由相比,MS 为 MVC 路由实现了一个完全不同的解析例程,这仍然让我感到惊讶。但显然你已经尝试过了,但它没有成功!感谢您的反馈
-
@Div - 完全不同的问题。您链接的问题是关于如何解析剑道网格中的数据。我试图弄清楚如何从 jQuery .param 方法解析数据。
标签: c# jquery rest asp.net-web-api