HttpWebRequest PUT(ADO.NET 데이터 서비스 프레임워크)
ADO.NET 데이터 서비스를 통해 배포된 데이터는 HTTP PUT 요청을 사용하여 수정할 수 있습니다. 데이터 인스턴스의 속성 값 대부분은 이 메서드를 사용하여 변경할 수 있지만 모든 데이터 인스턴스의 키 속성은 변경할 수 없습니다. PUT 요청은 엔터티 형식, 링크, 탐색 속성 및 복합 형식에 적용할 수 있습니다. 자세한 내용은 PUT 메서드(ADO.NET 데이터 서비스 프레임워크)를 참조하십시오.
PUT 요청을 사용하여 단일 속성 업데이트
PUT 요청을 통해 변경되는 데이터의 형식은 HTTP 요청의 본문 중 일부가 되는 문자열로 지정됩니다. PUT 요청은 먼저 "https://localhost:50781/AdvWksSalesS.svc/Address(2)"
라는 URI를 통해 AdventureWorksModel
에서 ID=2
인 Address
엔터티를 식별합니다. Address
엔터티의 AddressLine1
속성에 대한 변경 내용은 "{AddressLine1:'1600 1st St.'}"
구문을 사용하여 식별됩니다. 수정할 엔터티가 상속 계층의 일부이면 __metadata
구문 요소가 필요합니다.
"{__metadata:{Uri:'/Address(2)/', " +
"Type:'AdventureWorksModel.Address'}, " +
"AddressLine1:'500 5th St.'}"
JSON 구문을 사용하여 Address
속성의 업데이트 데이터를 나타내는 전체 예제는 이 문서 뒷부분에 나오는 코드 블록을 참조하십시오.
이 코드는 AdventureWorksModel
에서 Address
엔터티의 AddressLine1
속성을 업데이트합니다. HttpWebRequest r
은 수정할 엔터티의 URI인 https://localhost:50781/AdvWksSalesS.svc/Address(2)
와 함께 생성자의 단일 매개 변수로 만들어집니다. 앞서 설명한 것처럼 요청 본문은 requestPayload
라는 문자열에 할당됩니다. 이 메서드는 "PUT"
로 설정됩니다. json
프로토콜에 ContentType
이 할당됩니다. r.Accept = "application/json"
이라는 줄은 응답(있는 경우)을 json
프로토콜을 사용하여 인코딩한 후 돌려보내도록 서버에 알립니다.
서비스가 HTTP 기본 인증 같은 전송 기반 인증 스키마로 보호되는 경우 요청에 자격 증명을 지정하여 자격 증명을 전달할 수 있습니다. 이 예제에서는 DefaultCredentials
를 사용합니다.
r
요청은 유니코드 텍스트로 형식이 지정됩니다. UTF8Encoding 변수는 요청의 Stream 개체에 디지털 데이터를 기록하기 위해 요청의 길이(바이트)를 가져오는 데 사용됩니다. 요청에 대해 GetResponse
를 호출하여 HttpWebResponse
개체를 할당합니다. r.GetResponse
코드는 데이터를 전송하고 응답을 가져옵니다. 또 다른 스트림 개체인 rspStm
은 GetResponseStream
에서 반환하는 데이터를 포함하는 데 사용됩니다.
HttpWebRequest r =
WebRequest.Create("https://localhost:50781/AdvWksSalesS.svc/Address(2)")
as HttpWebRequest;
// __metadata is only required if inheritance is used,
// but __metadata syntax is used for completeness. Simple syntax:
//string requestPayload = "{AddressLine1:'1600 1st St.'}";
string requestPayload = "{__metadata:{Uri:'/Address(2)/', " +
"Type:'AdventureWorksModel.Address'}, " +
"AddressLine1: '1600 1st St.'}";
r.Method = "PUT";
UTF8Encoding encoding = new UTF8Encoding();
r.ContentLength = encoding.GetByteCount(requestPayload);
r.Credentials = CredentialCache.DefaultCredentials;
r.Accept = "application/json";
r.ContentType = "application/json";
//Write the payload to the request body.
using (Stream requestStream = r.GetRequestStream())
{
requestStream.Write(encoding.GetBytes(requestPayload), 0,
encoding.GetByteCount(requestPayload));
}
try
{
HttpWebResponse response = r.GetResponse() as HttpWebResponse;
string responseBody = "";
using (Stream rspStm = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(rspStm))
{
textBoxResponse.Text = textBoxResponse.Text +
"Response Description: " +
response.StatusDescription;
textBoxResponse.Text = textBoxResponse.Text +
"Response Status Code: " + response.StatusCode;
textBoxResponse.Text =
textBoxResponse.Text + "\r\n\r\n";
responseBody = reader.ReadToEnd();
}
}
textBoxResponse.Text = "Success: " +
response.StatusCode.ToString();
}
catch (System.Net.WebException ex)
{
textBoxResponse.Text = textBoxResponse.Text +
"Exception message: " + ex.Message;
textBoxResponse.Text = textBoxResponse.Text +
"\r\nResponse Status Code: " + ex.Status;
textBoxResponse.Text = textBoxResponse.Text + "\r\n\r\n";
// get error details sent from the server
StreamReader reader =
new StreamReader(ex.Response.GetResponseStream());
textBoxResponse.Text = textBoxResponse.Text +
reader.ReadToEnd();
}
참고 항목
개념
HttpWebRequest GET(ADO.NET 데이터 서비스 프레임워크)
HttpWebRequest POST(ADO.NET 데이터 서비스 프레임워크)
HttpWebRequest DELETE(ADO.NET 데이터 서비스 프레임워크)
공통적인 HTTP 요구 사항(ADO.NET 데이터 서비스 프레임워크)
.NET 클라이언트 라이브러리(ADO.NET 데이터 서비스 프레임워크)