2012-04-27 13 views
2

での投稿に役立ちました。私はASP.NET Web APIを使って遊んでいます。アカウントコントローラ上のASP.NET Web APIへのC#

:ポストへ

// 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 = "60"; 
     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、およびWindows Phoneのすべてを.NET 3.5に基づいて動作させる必要があるので、使用できません。

POCOをサーバーは大きな助けになるでしょう、歓声!

ADDITIONAL INFO:

  • 現在、私はエラーを取得していない、テストアプリはちょうどハングします。
  • WebAPIプロジェクトを無効にすると、サーバーが見つかりませんでした。
  • 私はルートやそのいずれも変更していません。
  • 同じコントローラ作業になります。
+0

エラーは何ですか? – Tejs

+0

何も、奇妙な部分は...未処理の例外でさえ、私はおそらくタイムアウトするのを待っていますか? – deanvmc

+0

それで、それは永遠にブロックされますか? – Tejs

答えて

2

外部のDLLとしてDLLを使用することができます応答ストリームをクローズする必要があります。私が見るほとんどの例では、コンテンツの長さを設定しています。メモリストリームにシリアル化し、そのストリームの長さをContent-Lengthとして使用する方がよい場合があります。残念ながら.net 3.5にはCopyStreamがありませんので、あなた自身でそれを書く必要があります。

+0

ああ!それは意味がある、歓声。 – deanvmc

0

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

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

+0

これはWinformsで動作しますが、このWebサービスでは2つの場所であるSilverlightとWP7で正方形に戻ります。 – deanvmc