다음을 통해 공유


PUT 메서드(ADO.NET 데이터 서비스 프레임워크)

다음 목록 및 예제에서는 ADO.NET 데이터 서비스에서 PUT 메서드를 사용하기 위한 프로토콜에 대해 설명합니다. Hypertext Transfer Protocol, RFC 2616에서 요구하는 다른 동작은 공통적인 HTTP 요구 사항(ADO.NET 데이터 서비스 프레임워크)PUT, POST 및 DELETE(ADO.NET 데이터 서비스 프레임워크)에 설명되어 있습니다.

다음 프로토콜은 PUT 메서드를 사용하는 HTTP 요청에 적용됩니다.

  • 성공한 모든 PUT 요청은 204 내용 없음 응답 코드를 반환합니다.

  • ADO.NET 데이터 서비스 리소스에 대한 PUT 요청은 요청의 콘텐츠를 리소스의 현재 상태와 병합합니다. 병합은 요청 본문의 각 구성 요소를 서버의 리소스와 비교하여 수행됩니다.

    • 리소스에 없는 구성 요소가 요청 본문에 있으면 해당 요청은 스키마 위반을 나타내며 422 처리할 수 없는 엔터티 응답 코드가 반환됩니다.

    • 요청 본문의 구성 요소가 리소스의 구성 요소와 일치하면 요청 본문에 있는 요소의 자식으로 일치 프로세스가 계속 진행됩니다.

  • 리소스 형식이 nullable이 아닐 경우 리소스 값을 null로 설정하는 PUT 요청을 보내면 422 처리할 수 없는 엔터티 응답 코드가 반환됩니다.

  • 리소스 형식이 비어 있는 상태를 정의하지 않을 경우 리소스 값을 비어 있는 값으로 설정하는 PUT 요청을 보내면 422 처리할 수 없는 엔터티 응답 코드가 반환됩니다.

  • PUT은 idempotent이어야 하므로 PUT을 사용하여 리소스를 리소스 집합에 삽입할 수 없습니다. 다시 말해 PUT은 POST 같은 추가 또는 만들기 의미 체계를 구현할 수 없습니다.

  • 요청 페이로드의 지연된 콘텐츠 주석은 무시됩니다.

  • HTTP 헤더의 요청 URI가 요청 페이로드의 관련 URI와 일치하지 않을 경우 요청 URI가 우선권을 갖습니다. 페이로드는 요청 URI 값을 포함한 것처럼 처리됩니다.

  • PUT 요청의 본문에 리소스 serialization의 작업 대상이 되는 리소스의 키가 포함된 경우 키 값이 무시됩니다. 리소스 키 값은 업데이트할 수 없습니다.

PUT 메서드를 지원하는 형식

이 문서의 뒤에 나오는 예제에는 PUT 메서드를 지원하는 리소스 형식이 요약되어 있습니다. 요청하는 주체에 지정된 리소스에 대한 권한이 없는 경우 PUT 메서드를 지원하는 리소스 형식에 대한 PUT 요청이 실패할 수 있습니다. 이 경우 요청은 Hypertext Transfer Protocol, RFC 2616에 설명된 대로 데이터 서비스에 다른 주체를 제공할 경우 요청이 성공할 수 있는지 여부에 따라 401 권한 없음 응답 코드 또는 403 사용 권한 없음 응답 코드를 반환합니다.

다음 예제에서는 PUT 메서드를 지원하거나 지원하지 않는 HTTP URL 경로 구문의 끝 요소를 보여 줍니다. 각 끝 요소마다 PUT 요청에 대한 설명 및 예측 가능한 결과가 함께 제공됩니다.

/<EntitySet>

URI 마지막 요소 예제

다음 URI 예제에서는 엔터티 집합을 끝 요소로 보여 줍니다.

/Customers

설명:

끝 요소인 엔터티 집합에는 PUT 메서드가 지원되지 않습니다. 405 메서드가 지원되지 않음 응답 코드가 반환됩니다.

/<EntitySet>(keyPredicate)

다음 URI 예제에서는 keyPredicate를 끝 요소로 보여 줍니다.

/Customers('ALFKI') 

설명:

  • PUT 메서드를 지원합니다.

  • 요청 본문에서 제공되고 keyPredicate로 식별되는 단일 리소스 형식 인스턴스를 업데이트합니다.

    • 관련된 형식에 대한 전체 업데이트가 지원되지 않습니다.

    • 관계에서 카디널리티가 1인 쪽에 대한 바인딩을 지원합니다.

  • keyPredicate로 식별되는 리소스 R1을 기존 리소스에 바인딩할 수 있도록 지원합니다.

    • R1에 관계에서 카디널리티가 1인 쪽을 식별하는 탐색 또는 링크의 값으로 기존 리소스 R2의 URI만 포함되어 있으면 R1이 R2에 바인딩됩니다.

    • R1에 URI와 리소스 본문이 포함되어 있으면 URI가 이미 R1에 바인딩된 기존 리소스 R2를 나타낸다고 가정하고 본문에 지정된 값으로 R2가 업데이트됩니다.

    • R1에 본문만 포함되어 있고 관련된 리소스 R2의 URI가 탐색 또는 링크 속성의 값으로 포함되어 있지 않으면 400 잘못된 요청이 반환됩니다.

  • 리터럴 값인 null에 해당하는 페이로드를 이 리소스로 보내면 400 잘못된 요청 응답 코드가 반환됩니다.

  • 리소스의 키를 구성하는 속성의 값은 업데이트할 수 없습니다. 새로운 값이 PUT 요청의 페이로드에 있으면 값이 무시됩니다.

다음 URI 예제에서는 숫자 키 조건자를 끝 요소로 보여 줍니다. 이 코드에서는 Product #123과 이 제품이 연결된 범주를 업데이트합니다. 즉, 연결된 범주를 다시 바인딩합니다.

/Products(123)

JSON 형식

{
__metadata:{ uri="/Products(123)", 
type="NorthwindModel.Product" },
Name:"New product name"
Category :   { __metadata: {uri:"/Category(2)" } }
}

/<NavigationProperty> 또는 /<LinkProperty>

다음 URI 예제에서는 탐색 속성 및 링크 속성을 끝 요소로 보여 줍니다.

/Customers('ALFKI')/Orders

/Customers('ALKFI')/Orders(1)

/Products(1)/Category(카디널리티가 1인 관계의 끝에서만 작동합니다.)

설명:

  • PUT 메서드를 지원합니다.

  • 탐색 또는 링크 속성이 단일 리소스 또는 카디널리티가 1인 관계의 끝을 식별하는 경우:

    • /<ResourceSet>(keyPredicate)와 같은 의미 체계를 사용합니다. 단, 요청 본문에 null 값만 포함된 리소스가 끝에서 두 번째 URI 세그먼트로 식별되는 리소스에서 바인딩을 해제하는 경우는 예외입니다.
  • 탐색 또는 링크 속성이 여러 리소스 또는 관계의 "여러" 끝을 식별하는 경우:

    • 지원되지 않습니다. 405 메서드가 지원되지 않음 응답 코드가 반환됩니다.

/<ComplexType>

다음 URI 예제에서는 복합 형식을 끝 요소로 보여 줍니다.

/Customers('ALFKI')/Address

설명:

  • PUT 메서드를 지원합니다.

  • 요청 URI의 리프로 식별되는 복합 형식을 요청 본문의 콘텐츠로 업데이트합니다.

  • 전체 업데이트를 지원합니다.

  • 요청 페이로드에 중첩된 복합 형식의 업데이트 가능한 콘텐츠가 포함될 수 있습니다. 이러한 업데이트의 경우 포함하는 리소스 형식 인스턴스의 범위를 벗어나지만 않는다면 정해진 최대 깊이는 없습니다.

/<Property>

다음 URI 예제에서는 속성을 끝 요소로 보여 줍니다.

/Customers('ALFKI')/FirstName

설명:

  • PUT 메서드를 지원합니다.

  • 속성 값의 업데이트를 지원합니다.

  • 속성은 null로 설정할 수 있습니다.

    • JSON 형식에서는 null 기본 형식을 사용합니다.

/<Property>/$value

다음 URI 예제에서는 속성 값을 끝 요소로 보여 줍니다.

/Customers('ALFKI')/FirstName/$value

설명:

  • PUT 메서드를 지원합니다.

  • 속성 원시 값의 업데이트를 지원합니다.

  • 값을 null로 설정할 수 있는 방법을 제공하지 않습니다.

  • 요청 본문의 MIME 형식이 서버에 있는 리소스 형식의 MIME 형식과 일치해야 합니다.

  • 속성의 형식이 비어 있는 상태를 정의할 경우 0바이트 요청 본문은 속성 값을 비어 있는 값으로 설정하고, 그렇지 않은 경우에는 422 처리할 수 없는 엔터티 응답 코드가 반환됩니다.

/<ServiceOperationName>

다음 URI 예제에서는 서비스 작업 이름을 끝 요소로 보여 줍니다.

/CustomersByCity?city='London'

설명:

  • PUT 메서드를 지원하지 않습니다.

  • ADO.NET 데이터 서비스 작업에 대해서는 PUT 동사가 정의되지 않았습니다.

  • 405 메서드가 지원되지 않음 응답 코드를 반환합니다.

PUT 요청에 대한 라운드트립 제한

ADO.NET 데이터 서비스 프레임워크는 특정 URI에 GET 요청을 사용하여 페이로드를 반환하는 라운드트립 시나리오를 지원합니다. 일반적인 시나리오는 데이터 일부를 수정한 후 동일한 페이로드를 해당 URI에 대한 PUT 요청에 전달하는 것입니다. 그러나 엔터티의 속성이 키가 아닌 ID 열인 경우에는 제대로 작동하지 않습니다. SSDL(저장소 스키마 정의 언어) 파일의 ID 열을 계산된 속성으로 변경하는 것이 유일한 해결 방법입니다.

참고 항목

개념

HttpWebRequest GET(ADO.NET 데이터 서비스 프레임워크)
HttpWebRequest PUT(ADO.NET 데이터 서비스 프레임워크)
HttpWebRequest POST(ADO.NET 데이터 서비스 프레임워크)
HttpWebRequest DELETE(ADO.NET 데이터 서비스 프레임워크)
PUT, POST 및 DELETE(ADO.NET 데이터 서비스 프레임워크)