2015-02-04 2 views
2

웹 시스템 API를 내부 시스템에 캡슐화 된 외관으로 개발 중입니다. json 객체를 WebAPI 2의 HttpGet 끝점에 전송하는 적절한 방법

api/v1/cars

가 지금은 기본 시스템 호출을 결정하는 매개 변수를 얻기 위해 내 API를 원하는 :

그래서, cars 엔드 포인트가 있다고 가정 할 수 있습니다.

처럼 : 그 API 게다가

{ 
    provider: 'service_1'. 
    access_token: 'token_2', 
    info: 'some_info' 
}, 
{ 
    provider: 'service_2'. 
    access_token: 'token_2', 
    info: 'some_info' 
} 

startdate, enddate, offset 및 다른 사람과 같은 표준 매개 변수를 사용합니다.

public async Task<Result<Cars>> Get([FromUri] RequestParams requestParams); 

public class RequestParams 
{ 
    public RequestParams() 
    { 
     Limit = 50; 
     Offset = 0; 
     StartDate = DateTime.Now; 
     EndDate = DateTime.Now; 
    } 

    public string UserId { get; set; } 
    public int Limit { get; set; } 
    public int Offset { get; set; } 
    public DateTime StartDate { get; set; } 
    public DateTime EndDate { get; set; } 
} 

uri의 표준 매개 변수를 쉽게 매핑 할 수 있지만 json 컬렉션을 올바르게 전달하는 방법은 알고 있습니다. 어떤 아이디어?

답변

2

정의에 따르면 GET 요청에는 페이로드 (즉, 본문의 데이터)가 없습니다. 따라서 GET 요청에 데이터를 전달하는 유일한 방법은 URL에 있습니다. 즉, 경로 데이터 또는 검색어 문자열 매개 변수를 사용하는 것입니다.

JSON 개체를 전달해야하는 경우 다른 요청 방법 (일반적으로 POST)을 사용해야합니다. 여기에는 전달 모음이 포함됩니다.

POST를 사용하면 웹 API가 자동으로 매개 변수 개체를 JSON 게시 개체로로드합니다. 매개 변수가 콜렉션 (예 : List<T>) 인 경우 정확하게 채워집니다.

단 하나만 고려해야합니다. 메서드는 본문에서 하나의 매개 변수 만로드 할 수 있습니다. 나는. 본문에서 웹 API 조치에 여러 매개 변수를 수신 할 수 없습니다. 그러나 URL에서 가져온 데이터와 본문에서 가져온 데이터가있을 수 있습니다.

그래서 POST 나 페이로드가있는 다른 방법을 사용하도록 요청과 방법을 변경해야합니다. 게다가, 당신은 thesse 두 가지 옵션 중 하나를 선택해야합니다

  1. 는 모든 표준 매개 변수를 포함하는 클래스를 생성하고 수집하고 매개 변수로 사용하고, 하나의 객체에서 포스트 알 lthe 데이터의와 같은 구조.

  2. 쿼리 문자열에서 표준 매개 변수를 전달하거나 경로 데이터를 사용하고 컬렉션을 JSON으로 전달합니다. JSON으로 게시 수집 onw 및 제안 각각 다른 매개 변수에 대한 하나의 쿼리 문자열이나 경로 데이터

쿼리 문자열의 컬렉션을 게시에 하지요 :이 경우, yourmethod는 여러 매개 변수가 있어야합니다 kapsi의 대답은 가능하지 않습니다. 클라이언트 측에서 매개 변수의 일종의 직렬화를 만들고 서버 측에서 수신 할 때 역 직렬화를하지 않는 한 말입니다. 그것은 잔인한 일입니다. 위에서 설명한대로 POST 또는 신체와 함께 다른 방법을 사용하십시오.

0

당신은 예를 들어 jQuery를 사용하는 경우, 당신은이 문제를 해결하기 위해 아약스 방법을 사용할 수 있습니다 :

$.ajax({ 
    url: "./", 
    type: "GET", 
    data: { 
     UserId: 1, 
     Limit: 2, 
     Offset: 2, 
     StartDate: "02/15/2015", 
     EndDate: "05/15/2015" 
    } 
}); 

jQuery를 행동하고 다음 GET이 만들어 취

?UserId=1&Limit=2&Offset=2&StartDate=02%2F15%2F2015&EndDate=05%2F15%2F2015&_=1423137376902 
관련 문제