다음을 통해 공유


HttpWebRequest POST(ADO.NET 데이터 서비스 프레임워크)

HTTP POST 요청을 사용하여 새 데이터를 ADO.NET 데이터 서비스에 추가할 수 있습니다. POST 요청을 키, 링크, 탐색 속성 및 서비스 작업으로 식별된 엔터티 집합에 적용할 수 있습니다. 자세한 내용은 POST 메서드(ADO.NET 데이터 서비스 프레임워크)를 참조하십시오.

새 엔터티 삽입을 위한 POST 요청

POST 요청으로 삽입되는 데이터의 형식은 HTTP 요청의 본문 중 일부가 되는 문자열로 지정됩니다. POST 요청은 먼저 URI "https://localhost:50781/AdvWksSalesS.svc/Address"를 통해 AdventureWorksModelAddress 엔터티 집합을 식별합니다. 수정할 엔터티가 상속 계층의 일부이면 __metadata 구문 요소가 필요합니다.

  "{__metadata:{Uri:'/Address/', " +
      "Type:'AdventureWorksModel.Address'}}"

JSON 구문을 사용하여 Address 엔터티 집합의 새 데이터 항목을 나타내는 전체 예제는 이 문서 뒷부분에 나오는 코드 블록을 참조하십시오.

이 코드에서는 새 Address 엔터티를 AdventureWorksModel을 배포하는 데이터 서비스에 삽입합니다. HttpWebRequest r은 삽입할 엔터티 형식의 URI인 https://localhost:50781/AdvWksSalesS.svc/Address와 함께 생성자의 단일 매개 변수로 만들어집니다. 새 항목의 속성 데이터를 구성하는 여러 변수를 초기화하려면 JSON 형식의 serialization이 필요합니다. DateTime serialization은 JSON 코드 라이브러리에서 보다 효율적으로 관리되는 복잡한 변환 과정이지만 여기에도 serialization이 적용됩니다. JSON serialization에 대한 자세한 내용은 JSON Serialization 규칙(ADO.NET 데이터 서비스 프레임워크)을 참조하십시오. stateProvinceId에 할당된 정수 및 rowGuid에 할당된 GuidrequestPayload 문자열의 초기화 중 serialize됩니다.

앞서 설명한 것처럼 요청 본문은 requestPayload라는 문자열에 할당됩니다. 메서드를 "POST"로 설정합니다. 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")
       as HttpWebRequest;

    DateTime creationDate = DateTime.Now;
    // Convert the date to JSON format.
    long ticks = (creationDate.ToUniversalTime().Ticks - 
  (new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).Ticks) / 10000;
    Int32 stateProvinceId = 79;
    Guid rowGuid = Guid.NewGuid();

    // __metadata is only required if inheritance is used.
    string requestPayload = "{__metadata:{Uri:'/Address/', " +
        "Type:'AdventureWorksModel.Address'}, " + 
        "AddressLine1:'703 NW 170th St.', " +
        "City:'Kirkland', StateProvinceID:" + 
        stateProvinceId.ToString() + 
        ", PostalCode:'98021', rowguid:'" + 
        rowGuid.ToString() + 
        "', ModifiedDate:'\\/Date(" + ticks + ")\\/'}";

    r.Method = "POST";
    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();
        
    }

참고 항목

개념

POST 메서드(ADO.NET 데이터 서비스 프레임워크)
HttpWebRequest PUT(ADO.NET 데이터 서비스 프레임워크)
HttpWebRequest GET(ADO.NET 데이터 서비스 프레임워크)
HttpWebRequest POST(ADO.NET 데이터 서비스 프레임워크)
HttpWebRequest DELETE(ADO.NET 데이터 서비스 프레임워크)
공통적인 HTTP 요구 사항(ADO.NET 데이터 서비스 프레임워크)
.NET 클라이언트 라이브러리(ADO.NET 데이터 서비스 프레임워크)