C#WebApi查询参数解析

C#WebApi查询参数解析,c#,asp.net-web-api,query-string,querystringparameter,C#,Asp.net Web Api,Query String,Querystringparameter,我有一个来自jquery网格的查询字符串,我正试图将其解析为C#WebAPI中的参数,但我无法获取其中一个要填充的属性 查询字符串: ?current=1&rowCount=10&sort[received]=desc&sort[email]=asc&sort[id]=desc&searchPhrase= 方法: public IEnumerable<IUserDto> Get(int current, int rowCount, NameV

我有一个来自jquery网格的查询字符串,我正试图将其解析为C#WebAPI中的参数,但我无法获取其中一个要填充的属性

查询字符串:

?current=1&rowCount=10&sort[received]=desc&sort[email]=asc&sort[id]=desc&searchPhrase=
方法:

public IEnumerable<IUserDto> Get(int current, int rowCount, NameValueCollection sort, string searchPhrase)
公共IEnumerable Get(int current、int rowCount、NameValueCollection排序、字符串搜索短语) “sort”参数始终为空,所有其他参数都正确填充。我尝试了多种类型的参数,但无论我尝试了什么,我总是以空参数结束


任何关于参数类型的指导或建议都将不胜感激。

如果您想从查询字符串中反序列化复杂的聚合值,例如
NameValueCollection
,则需要使用
FromUriAttribute
来修饰参数。这并不保证它将以任何方式工作,但除非您定义了自定义参数处理程序,否则它将无法工作

public IEnumerable<IUserDto> Get(
    int current,
    int rowCount,
    [FromUri] NameValueCollection sort,
    string searchPhrase
) { ... }
WebAPI的参数绑定不会自动将这些参数聚合到字典中

你可以像这样建造它

var sortParam = ['received', 'id', 'email'].reduce(function (o, key) {
  o[key] = sort[key];
  return o;
}, {});

var queryParams = '?current=' + 1 + 
                  '&rowCount' = 10 + 
                  '&sort=' + JSON.stringify(sortParam) +
                  '&searchPhrase=' + something;

我还建议更改顺序,以便
排序
参数是最后一个。

我尝试了解决方案,但排序参数仍然返回为null,我也尝试了
[FromUri]字典[string,string]排序
[FromUri]列表排序
^意思是
[FromUri]字典排序
var sortParam = ['received', 'id', 'email'].reduce(function (o, key) {
  o[key] = sort[key];
  return o;
}, {});

var queryParams = '?current=' + 1 + 
                  '&rowCount' = 10 + 
                  '&sort=' + JSON.stringify(sortParam) +
                  '&searchPhrase=' + something;