2014-06-11 2 views
0

입력 및 출력을 위해 JSON을 사용하여 RESTful API를 작성 중입니다. 들어오는 요청에 관련 데이터가 포함 된 JSON 형식의 본문이 있어야하며 응답도 JSON 형식이어야합니다.웹 API 2 액션에서 JSON 형식의 데이터 수신?

내가 겪고있는 문제는 나 자신의 삶에 대해 POST 요청에서 정보를 수집하고 해당 객체에 올바르게 매핑하는 방법을 찾아 낼 수 없다는 것입니다.

예를 들어,이 유사한 JSON 형식의 연락처 개체를 포함합니다 "/ 연락처"에 대한 POST 요청을 허용 할 :

{"Given":"John", "Surname":"Doe"} 

문제는 내가 할 수없는 시도 상관없이, 없다 수신 액션이이 정보를 인식하도록하십시오. 내 작업 내에서 요청 본문에 제출 된 JSON 객체에 어떻게 액세스합니까?

[RoutePrefix("contacts")] 
public class ContactsController : BaseController 
{ 
    [Route("")] 
    [ResponseType(typeof(ApiResponse))] 
    public IHttpActionResult PostContacts(FormDataCollection data) 
    { 
     ApiResponse response = new ApiResponse(); 

     response.Data = data; 

     return Ok(response); 
    } 
} 

응답에는 항상 "response.Data"에 대한 null 값이 포함되어 있으며 응용 프로그램을 디버깅 할 때 "데이터"가 실제로 null임을 알 수 있습니다.

편집 :

는 내가이 작업을 같은 을 거라고 방법을 언급하는 것을 잊었다. 접촉 변수가 자동으로 JSON을 기반으로 채워집니다

public IHttpActionResult PostContacts(Contact contact) {} 

들어오는 요청 본문에 포함 된 이상적으로 나는 나의 행동이 유사한 서명을 갖고 싶어. 이 같은 몸에서 개체를로드

답변

3

,

publc class Contact { 
     public string Given { get; set; } 
     public string Surname{ get; set; } 
    } 

다음 웹 API는

public IHttpActionResult PostContacts(Contact data) 
    { 
     ApiResponse response = new ApiResponse(); 
     response.Data = data;  
     return Ok(response); 
    } 
여전히

가 작동하지 않는 경우, 당신이해야 할 수도 있습니다에 대한 객체를 바인딩 데이터를 게시하는 방법을 보여줍니다.

+0

나는 이것을 시도했지만, 내가 뭘 잘못하고 있었는지 전혀 몰랐다. 나는 당신의 제안을 시도했고 그것은 완벽하게 작동했습니다, 감사합니다! –

2

봅니다 : json으로 개체에 당신의 재산이 적절하게 이름을 지정하는 경우

public IHttpActionResult PostContacts([FromBody]Contact contact) {} 

이 자동으로 Contact 객체의 이식한다. 그렇게하면 FormDataCollection을 전혀 사용할 필요가 없습니다. 당신의 Contact 클래스는 JSON 객체와 동일한 속성 이름이있는 경우

+1

정말 감사드립니다. '[FromBody]'주석이 필요 없기 때문에 다른 대답을 받아 들였습니다.하지만이 답변이 작동한다는 것을 (이 질문을 접할 수있는 다른 사람들을 위해) 여기에서 주목하고 싶었습니다. –

+1

모두 당신이 데이터를 제출하는 방법에 달려 있습니다, 나는 단지 당신이 [FromBody] 없이는 이미 시도했다고 가정합니다.) 그러나 요청 본문에 json 데이터를 제출하려면 [FromBody] API가 올바르게로드합니다. – Robban

+0

나는 실제로 당신과 동의하고 그것도 잘 작동해야한다고 생각했다. 그러나 요청 본문에 데이터를 제출하고 있는데,'[FromBody]'주석이 없어도 여전히 올바르게 작동하고있다. 아마도 이것은 웹 아피 v1 대 웹 아피 v2 차이 또는 이와 비슷한 것입니까? 나는 두 가지 대답을 받아 들일 수 있었으면 좋겠다. –