HttpWebRequest PUT (ADO.NET Data Services フレームワーク)
ADO.NET Data Services によって配置されるデータは、HTTP PUT 要求により変更できます。データ インスタンスのプロパティのほとんどの値は、メソッドによって変更できますが、データ インスタンスのキー プロパティは変更できません。PUT 要求は、エンティティ型、リンク、ナビゲーション プロパティ、および複合型に適用できます。詳細については、「PUT メソッド (ADO.NET Data Services フレームワーク)」を参照してください。
1 つのプロパティを更新するための PUT 要求
PUT 要求により変更されるデータは、HTTP 要求の一部となる文字列として書式設定されます。URI "https://localhost:50781/AdvWksSalesS.svc/Address(2)"
の場合、PUT 要求は、AdventureWorksModel
内にある ID=2
の Address
エンティティを最初に識別します。Address
エンティティの AddressLine1
プロパティに対する変更は、構文 "{AddressLine1:'1600 1st St.'}"
で指定します。変更するエンティティが継承階層の一部である場合は、__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)
を使用して作成されます。既に解説しているとおり、要求の本文は requestPayload
という名前の文字列に割り当てられます。メソッドは "PUT"
に設定されます。ContentType
は json
プロトコルに割り当てられます。r.Accept = "application/json"
行は、json
プロトコルを使用してエンコードした応答 (応答がある場合) を返すようにサーバーに指示します。
サービスが HTTP 基本認証などのトランスポート ベースの認証スキームで保護されている場合は、資格情報を、要求に割り当てることによって渡すことができます。この例では、DefaultCredentials
を使用しています。
要求 r
は Unicode テキストとして書式設定されます。要求の Stream オブジェクトにデジタル データを書き込むために、UTF8Encoding 変数を使用して要求の長さ (バイト単位) が取得されます。HttpWebResponse
オブジェクトは、要求に対して GetResponse
を呼び出すことによって割り当てられます。コード r.GetResponse
はデータを送信し、応答を取得します。もう 1 つの Stream オブジェクト 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 Data Services フレームワーク)
HttpWebRequest POST (ADO.NET Data Services フレームワーク)
HttpWebRequest DELETE (ADO.NET Data Services フレームワーク)
一般的な HTTP 要件 (ADO.NET Data Services フレームワーク)
.NET クライアント ライブラリ (ADO.NET Data Services フレームワーク)