2017-12-15 2 views
0

나는 90 % 기능을 갖춘 웹 API를 만들었습니다. 내가 막힌 곳은 웹 API를 사용하여 jQuery 스타일 배열로 인코딩 된 매개 변수를 받아들이는 방법이다. 여기 내 GET 요청입니다 :웹 API - 배열 urlencoded 매개 변수 허용

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의 매개 변수로 어떻게 받아들입니까? 내 방법은 다음과 같은 메시지가 500 오류를 수신,이 경우

[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 ... 
} 

: 나는 다음 시도했다

선택적 매개 변수 '종류'가 'FormatterParameterBinding'에 의해 지원되지 않습니다. 내 메소드가 호출되는,

public IHttpActionResult GetTrades(string[,] sort, int page = -1, int pageSize = -1, int skip = -1, int take = -1) 
{ 
    // Do stuff ... 
} 

이 사용하지만, 일종의 null은 항상 :

나는 또한이 시도했습니다.

public IHttpActionResult GetTrades(object sort, int page = -1, int pageSize = -1, int skip = -1, int take = -1) 
{ 
    // Do stuff ... 
} 

다시 말하지만, 내 방법은 호출되는,하지만 일종의 null은 항상 : 나는 또한 다음과 같이 좀 더 일반적인 시도했습니다.

어떤 제안이 도움이 될 것입니다!

+1

[MVC 컨트롤러에 대한 다차원 배열] 가능한 복제본 (https://stackoverflow.com/questions/14309007/multidimensional-array-to-mvc-controller) –

+1

@CaiusJard - 이것은 동일하지 않습니다. 다차원 배열을 전달하려고하지 않고 MVC 컨트롤러에 전달하려고하지 않습니다. 다른 jQuery 스타일 배열을 전달하려고합니다. 귀하가 게시 한 사본의 솔루션이 제게 적합하지 않습니다. 또한 MVC 컨트롤러에 전달하려고하지 않습니다. 웹 API 컨트롤러에 전달하려고합니다. – Icemanind

+0

MVC 컨트롤러에 제공되는 솔루션을 상황에 맞게 적용 할 수 없다는 귀하의 주장에 따라 가까운 투표를 철회했습니다. MS가 웹 API 라우팅과 비교하여 MVC 라우팅을위한 완전히 다른 구문 분석 루틴을 구현 한 것이 놀랍지 만, 분명히 이제는 제대로 된 결과를 얻지 못했습니다. 의견을 주셔서 감사합니다 –

답변

0

이 많은 매개 변수를 보내는 경우 Object에서 데이터를 보낼 수 있다는 점에서 POST 메서드를 사용하는 것이 좋습니다. 당신은 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 ... 
} 

AND (쉼표로 방법은 일종의 문자열 데이터 분할 GetTrades에서 전화를받은 후 API 호출

GET /api/v1/Trades?take=3&skip=0&page=1&pageSize=3&sort=tradeName asc,Col2 desc 

을하고,) 다음에 space(). 따라서 열 이름과 정렬 순서가 표시됩니다.

+0

이 솔루션은 작동하지 않습니다. 'sort'는 항상 빈 문자열을 반환합니다.또한 POST 메소드를 사용하기위한 귀하의 의견에 대해 RESTful API를 작성하고 데이터를 검색하는 경우 (수정하지 않고) GET 메소드를 작성하는 것이 표준적인 방법이 아닌가? – Icemanind