2017-05-14 55 views
3

我有一个查询字符串从jquery网格进来,我试图解析到C#Web API中的参数,但我无法获得其中一个属性来填充。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) 

的 '排序' 参数始终是零,所有其他人正确填充。我已经尝试了多种类型的参数,但无论我尝试过什么,我总是以null参数结束。

任何方向或参数类型的建议将不胜感激。

回答

0

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

public IEnumerable<IUserDto> Get(
    int current, 
    int rowCount, 
    [FromUri] NameValueCollection sort, 
    string searchPhrase 
) { ... } 

另外,你需要确保你正在序列化为您的网址其实是一个JSON格式的字典。从您发布的URL,它看起来像你从本地对象作为单独的查询字符串参数添加receivedidemail性能

&sort[received]=desc&sort[email]=asc&sort[id]=desc 

的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; 

我也建议改变顺序,使sort参数是最后一次。

+0

我试过解决方案,但排序参数仍然返回为空,我也试过了; '[FromUri] Dictionary [string,string] sort' '[FromUri] List > sort' –

+0

^^表示'[FromUri] Dictionary sort' –