次の方法で共有


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=2Address エンティティを最初に識別します。Address エンティティの AddressLine1 プロパティに対する変更は、構文 "{AddressLine1:'1600 1st St.'}" で指定します。変更するエンティティが継承階層の一部である場合は、__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) を使用して作成されます。既に解説しているとおり、要求の本文は requestPayload という名前の文字列に割り当てられます。メソッドは "PUT" に設定されます。ContentTypejson プロトコルに割り当てられます。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 フレームワーク)

その他のリソース

エンティティ データ モデル