共用方式為


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

您可以使用 HTTP PUT 要求來修改 ADO.NET 資料服務所部署的資料。您可以透過這個方法變更資料執行個體 (Instance) 的大部分屬性值,但是無法變更任何資料執行個體的索引鍵屬性。PUT 要求可以套用至實體類型、連結、導覽屬性和複雜類型。如需詳細資訊,請參閱 PUT 方法 (ADO.NET 資料服務架構)

更新單一屬性的 PUT 要求

PUT 要求所變更的資料會格式化成為屬於 HTTP 要求主體一部分的字串。PUT 要求會先依據 URI "https://localhost:50781/AdvWksSalesS.svc/Address(2)" 識別 AdventureWorksModelID=2Address 實體。對 Address 實體之 AddressLine1 屬性所做的變更是由語法 "{AddressLine1:'1600 1st St.'}" 所指定。如果要修改的實體屬於繼承階層架構 (Inheritance Hierarchy) 的一部分,就會需要使用 __metadata 語法項目:

  "{__metadata:{Uri:'/Address(2)/', " +
      "Type:'AdventureWorksModel.Address'}, " +
      "AddressLine1:'500 5th St.'}"

使用 JSON 語法來表示 AddressLine1 屬性之更新資料的完整範例顯示在這段描述結尾的程式碼區塊中。

此程式碼會更新 AdventureWorksModelAddress 實體的 AddressLine1 屬性。HttpWebRequest r 會使用要修改之實體的 URI (https://localhost:50781/AdvWksSalesS.svc/Address(2)) 建立成其建構函式 (Constructor) 的單一參數。要求的主體 (如以上所述) 會指派給名為 requestPayload 的字串。此方法設定為 "PUT"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(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 資料服務架構)

其他資源

Entity Data Model