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)"
識別 AdventureWorksModel
中 ID=2
的 Address
實體。對 Address
實體之 AddressLine1
屬性所做的變更是由語法 "{AddressLine1:'1600 1st St.'}"
所指定。如果要修改的實體屬於繼承階層架構 (Inheritance Hierarchy) 的一部分,就會需要使用 __metadata
語法項目:
"{__metadata:{Uri:'/Address(2)/', " +
"Type:'AdventureWorksModel.Address'}, " +
"AddressLine1:'500 5th St.'}"
使用 JSON 語法來表示 AddressLine1
屬性之更新資料的完整範例顯示在這段描述結尾的程式碼區塊中。
此程式碼會更新 AdventureWorksModel
之 Address
實體的 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 資料服務架構)