2013-11-21 3 views
4

다음 질문에 대한 답을 찾고 있었지만 지금까지 찾지 못했습니다.(MVC Web API) OData 서비스에 하위 항목이있는 엔티티 유형 게시

  1. OData 표준은 하위 엔터티 개체가있는 엔터티 개체를 포함하는 POST 요청을 지원합니까?
  2. 그렇다면 ASP.NET MVC 웹 API OData 프레임 워크 (EntitySetController)가이 기능을 즉시 지원합니까?

내가 염두에두고있는 시나리오는 다음과 같습니다. Child 개의 개체가 포함 된 Parent 개체가 있습니다. 다음과 같은 시체로 POST를 수행 할 수 있습니까? 나중에 하나의 아이를 게시를 통해 Parent 객체에 다른 아이를 추가 할 경우

{ "Property1" : "Property value", "Property2" : 100 
    "Children" : [ 
      { "ChildProperty" : "Some value" }, 
      { "ChildProperty" : "Some other value" }, 
      { "ChildProperty" : "Some third value" } 
    ] 
} 

또한, 함께 연결하는 표준화 된 방법은 무엇입니까? 예 :

{ "ChildProperty" : "Fourth child property val", "Parent" : 321 } 

여기서 '321'은 부모 개체의 ID입니까?

많은 조언을 해주신 많은 분들께 감사드립니다.

+0

페이로드를 POST 할 위치에서 URL을 공유 할 수 있습니까? –

+0

글쎄, 가상의 예이기 때문에 실제 URL이 없지만 www.mysite.com/odata/parents와 같을 것입니다. 나는. 아이디가없는 새 Parent 객체를 POST 할 URL과 동일한 URL입니다. –

+0

복잡한 물건을 말하면 처음에는 혼란 스러웠습니다. OData의 엔터티 만 직접 처리 할 수 ​​있으므로 이상적으로는 엔터티 개체라고해야합니다. 아래에 답변을 추가했습니다. –

답변

6

예, OData는 이것을 지원하며 웹 API OData는이를 지원합니다. OData는 그것을 deep insert이라고 부릅니다. 다음은 spec에 대한 링크입니다.

지금 중첩 된 항목뿐만 아니라 새로운 및 작성해야

1) 깊은 삽입의 두 가지 유형이있을 수있다. json으로 페이로드의 예는 부모 항목이 새로운 및 중첩 된 항목에 연결되어 있어야합니다, 다음과 같습니다

{ 
    ‘Property1’: 42, 
    ‘Property2’: ‘Contoso’, 
    ‘Children’: [ 
    { 
     ‘ChildProperty’: 1, 
     ………. 
    }, 
    { 
     ‘ChildProperty’: 2, 
     ………. 
    }] 
} 

2) 중첩 된 항목이 이미 존재합니다. OData 프로토콜은이 바인딩을 호출합니다. 샘플 페이로드는 다음과 같습니다.

{ 
    ‘Property1’: 42, 
    ‘Property2’: ‘Contoso’, 
    ‘[email protected]’: [ 
     “http://localhost/Children(1)”, 
     “http://localhost/Children(2)”, 
    ] 
} 

웹 API OData는 첫 번째 종류의 딥 삽입을 지원하며 바인딩 (두 번째 예)을 지원하지 않습니다. 첫 번째 페이로드의 경우 컨트롤러에 Parent 개체가 수신되고 Children 컬렉션이 제대로 채워집니다.

그리고 두 번째 질문에 대한 두 가지 옵션,

1) ~/Parents(321)/Children URL

2) ~/Children에 아이를 게시 한 후이 응답에서이 아이의 ID 링크를 게시하는 아이를 POST가 URL ~/Parents(321)/$links/Children으로 이동하십시오.

OData 스펙의이 부분에 대해서는 link을 참조 할 수 있습니다.

+0

감사합니다. 후자의 대답, 1 부)에 관해서, 나는 관련 행동 방법이 관습에 따라 명명 될 것이라고 생각한다. 이 경우 메소드가 HttpPost 속성과 함께 'PostChildren (int key, Child entity) {...}'일까요? –

+0

http://aspnetwebstack.codeplex.com/discussions/457028에서 내 질문에 대한 답을 찾았습니다. 너 바빴어. ;) 그래도 링크를 통해 바인딩을 지원하지 않으면 더 복잡한 작업을 수행하는 것이 매우 어려워 보입니다. ASP.NET MVC에서 이러한 지원을 기대할 수있는 경우 어떤 통찰력이 필요합니까? –

+0

아직 웹 API에 바인딩 지원이 추가 되었습니까? – HappyNomad

관련 문제