共用方式為


HttpWebRequest POST (ADO.NET 資料服務架構)

您可以使用 HTTP POST 要求,將新的資料加入至 ADO.NET 資料服務。POST 要求可以套用至索引鍵所識別的實體集、連結、導覽屬性和服務作業。如需詳細資訊,請參閱 POST 方法 (ADO.NET 資料服務架構)

插入新實體的 POST 要求

POST 要求所插入的資料會格式化成為屬於 HTTP 要求主體一部分的字串。POST 要求會先依據 URI "https://localhost:50781/AdvWksSalesS.svc/Address" 識別 AdventureWorksModel 中的 Address 實體集。如果要修改的實體屬於繼承階層架構 (Inheritance Hierarchy) 的一部分,就會需要使用 __metadata 語法項目:

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

使用 JSON 語法來表示 Address 實體集之新資料項目的完整範例顯示在這段描述結尾的程式碼區塊中。

此程式碼會將新的 Address 實體插入部署 AdventureWorksModel 的資料服務。HttpWebRequest r 會使用要插入之實體類型的 URI (https://localhost:50781/AdvWksSalesS.svc/Address) 建立成其建構函式 (Constructor) 的單一參數。構成新項目屬性資料之許多變數的初始化需要採用 JSON 格式的序列化 (Serialization)。DateTime 序列化是由 JSON 程式碼程式庫 (英文) 有效管理的複雜轉換,但在此包含了序列化。如需 JSON 序列化的詳細資訊,請參閱 JSON 序列化規則 (ADO.NET 資料服務架構)。指派給 stateProvinceId 的整數和指派給 rowGuidGuid 會在 requestPayload 字串的初始化中序列化。

要求的主體 (如以上所述) 會指派給名為 requestPayload 的字串。方法設定為 "POST"ContentType 會指派給 json 通訊協定 (Protocol)。r.Accept = "application/json" 這一行會告知伺服器傳回使用 json 通訊協定所編碼的回應 (如果有的話)。

如果服務受到「HTTP 基本驗證」等以傳輸為基礎的驗證配置所保護,就可以將認證指派給要求,藉以傳遞認證。這個範例使用的是 DefaultCredentials

要求 r 會格式化成為 Unicode 文字。UTF8Encoding 變數會用於取得要求的長度 (以位元組為單位),以便將數位資料寫入要求的 Stream 物件。HttpWebResponse 物件的指派方式是針對要求呼叫 GetResponse。程式碼 r.GetResponse 會傳送資料並取得回應。另一個資料流物件 (Stream Object) rspStm 則是用於包含 GetResponseStream 所傳回的資料。

    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 資料服務架構)