2017-05-14 11 views
3

C# Web API 내의 매개 변수를 구문 분석하려고하는 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) 

'종류'매개 변수는 항상 null의 경우, 모든 다른 사람들이 제대로 웁니다. 나는 매개 변수에 대해 여러 유형을 시도했지만 아무리 노력해도 항상 null 매개 변수로 끝납니다.

매개 변수 유형에 대한 지침이나 제안 사항이 있으면 알려주세요.

답변

0

쿼리 문자열에서 NameValueCollection과 같은 복잡한 집계 값을 deserialize하려면 FromUriAttribute으로 매개 변수를 장식해야합니다. 이것은 어떤 방법 으로든 작동한다는 것을 보증하지는 않으나 사용자 정의 매개 변수 처리기를 정의하지 않으면 작동하지 않습니다.

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

또한 URL에 직렬화하는 것이 실제로 JSON 형식의 사전인지 확인해야합니다. 개별 쿼리 문자열 매개 변수로 로컬 개체에서 received, idemail 속성을 추가하는 것처럼 당신이 게시 된 URL에서, 그것은 보이는 WebAPI의 매개 변수를 자동으로 위해 사전에이를 집계하지 않을 결합

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

당신.

당신은 내가 또한 sort 매개 변수가 마지막이되도록 순서를 변경 제안

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; 

처럼 구축 할 수 있습니다.

+0

해결책을 시도했지만 정렬 매개 변수가 여전히 null로 되돌아 왔습니다. 또한 시도했습니다. '[FromUri] 사전 [string, string] sort' ''[FromUri] 목록 > sort' –

+0

^^ 의미 [FromUri] 사전 sort' –