Share via


HttpWebRequest POST (ADO.NET Data Services フレームワーク)

HTTP POST 要求を使用して新しいデータを ADO.NET Data Services に追加できます。POST 要求は、キー、リンク、ナビゲーション プロパティ、およびサービス操作によって指定されるエンティティ セットに適用できます。詳細については、「POST メソッド (ADO.NET Data Services フレームワーク)」を参照してください。

新しいエンティティを挿入するための POST 要求

POST 要求により挿入されるデータは、HTTP 要求の一部となる文字列として書式設定されます。URI "https://localhost:50781/AdvWksSalesS.svc/Address" の場合、POST 要求は、AdventureWorksModel に設定された Address エンティティを最初に識別します。変更するエンティティが継承階層の一部である場合は、__metadata 構文要素が必要になります。

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

JSON 構文を使用して Address エンティティ セットの新しいデータ項目を表す例を、この記述の末尾のコード ブロックに示しています。

このコードは、AdventureWorksModel を配置するデータ サービスに新しい Address エンティティを追加します。HttpWebRequest r は、そのコンストラクタの単一のパラメータとして、挿入するエンティティ型の URI https://localhost:50781/AdvWksSalesS.svc/Address を使用して作成されます。新しい項目のプロパティのデータを構成するいくつかの変数の初期化には、JSON 形式のシリアル化が必要になります。DateTime のシリアル化は複雑な変換であり、JSON コード ライブラリにより管理することが推奨されますが、これにはシリアル化が含まれています。JSON のシリアル化の詳細については、「JSON シリアル化ルール (ADO.NET Data Services フレームワーク)」を参照してください。stateProvinceId に割り当てられた整数と rowGuid に割り当てられた Guid は、requestPayload 文字列のシリアル化でシリアル化されます。

既に解説しているとおり、要求の本文は requestPayload という名前の文字列に割り当てられます。メソッドは "POST" に設定されます。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")
       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 Data Services フレームワーク)
HttpWebRequest PUT (ADO.NET Data Services フレームワーク)
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 フレームワーク)