다음을 통해 공유


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=2Address 엔터티를 식별합니다. 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 코드는 데이터를 전송하고 응답을 가져옵니다. 또 다른 스트림 개체인 rspStmGetResponseStream에서 반환하는 데이터를 포함하는 데 사용됩니다.

    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 데이터 서비스 프레임워크)

관련 자료

엔터티 데이터 모델