我已经构建了一个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 ...
}
使用此方法,我的方法被调用,但sort总是null
。我也尝试过更通用的,比如:
public IHttpActionResult GetTrades(object sort, int page = -1, int pageSize = -1, int skip = -1, int take = -1)
{
// Do stuff ...
}
同样,我的方法被调用,但sort总是null
。
任何建议都会有所帮助!
答案 0 :(得分:0)
如果您要发送这么多参数,那么最好使用POST方法,因为您可以在Object中发送数据。
如果你想使用GET方法,那么使用
[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 = "")
{
// Do stuff ...
}
和做API调用
GET /api/v1/Trades?take=3&skip=0&page=1&pageSize=3&sort=tradeName asc,Col2 desc
在 GetTrades 方法中接听电话后,用逗号(,)和空格()分割排序字符串数据。因此,您将获得列名称和排序顺序。