Web API - 接受数组urlencoded参数

时间:2017-12-15 01:02:15

标签: c# jquery rest asp.net-web-api

我已经构建了一个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

任何建议都会有所帮助!

1 个答案:

答案 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 方法中接听电话后,用逗号(,)和空格()分割排序字符串数据。因此,您将获得列名称和排序顺序。