2

ASP.NETWebAPIで遊んでいます。作成したメソッドに投稿して、投稿したオブジェクトを返すだけでよいかどうかを確認しています。

アカウントコントローラー:

// POST /api/accounts
public Account Post(Account account)
{
   return account;

}

投稿に使用されるコード:

    public void PostAccount()
    {
        // http://local_ip/api/accounts
        var uri = string.Format("{0}", webServiceRoot); 


        var acc = new Account();
        acc.AccountID = "8";
        acc.AccountName = "Mitchel Cars";
        acc.AccountNumber = "600123801";
        acc.SubscriptionKey = "2535-8254-8568-1192";
        acc.ValidUntil = DateTime.Now;


        var request = (HttpWebRequest)WebRequest.Create(uri);
        request.Method = "POST";
        request.ContentType = "application/xml";
        request.ContentLength = 800;

        XmlSerializer xmlSerializer = new XmlSerializer(typeof(Account));
        xmlSerializer.Serialize(request.GetRequestStream(), acc);

        var response = (HttpWebResponse)request.GetResponse();

        XmlSerializer serializer = new XmlSerializer(typeof(Account));

        var newAcc = (Account)serializer.Deserialize(response.GetResponseStream());

    }

読みやすくするために、エラーチェックやボイラープレートコードを削除しました。これは厳密には、実際にPOSTすることを理解するためのスパイクです。私の理解では、GetRequestStream()に書き込む必要があります。すべての読み取りなどは問題なく機能しているようですが、request.GetResponse();からここに戻ることはありません。

私が簡単な取得を行う場合、それはうまく機能します。このようなことを行うためにHTTPClientというクラスを使用できることはわかりましたが、WinForms、Silverlight、およびWindowsPhoneですべて.Net3.5に基づいてこれを機能させる必要があるため、使用できません。

POCOをサーバーにプッシュする手助けは、大きな助けになるでしょう、乾杯!

追加情報:

  • 現在、エラーは発生していません。テストアプリがハングします。
  • WebAPIプロジェクトをオフにすると、サーバーが見つかりませんという応答が返されます。
  • ルートなどは変更していません。
  • 同じコントローラーの仕事になります。
4

2 に答える 2

2

応答ストリームを閉じる必要があります。私が見るほとんどの例は、コンテンツの長さの設定も示しています。メモリストリームにシリアル化してから、そのストリームの長さをContent-Lengthとして使用する方がよい場合があります。残念ながら、.net 3.5にはCopyStreamがないため、自分で作成する必要がある場合があります。

于 2012-04-27T18:58:06.697 に答える
0

HttpClientを使用する場合は、RESTスターターキットのダウンロードをインストールできます。DLLを外部DLLとして使用します

http://forums.asp.net/t/1680252.aspx/1

于 2012-04-27T14:59:43.840 に答える