2012-04-27 70 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的類來做這件事,但是我不能使用它,因爲我需要爲基於.Net 3.5的WinForms,Silverlight和Windows Phone工作。所有基於.Net 3.5的

任何幫助推動POCO服務器將是一個很大的幫助,歡呼!

附加信息:

  • 目前我沒有得到任何錯誤,測試程序只是掛起。
  • 如果我關閉WebAPI項目,我得到一個服務器找不到響應。
  • 我沒有改變任何路線或任何。
  • 獲得相同的控制器工作。
+0

你得到的錯誤是什麼? – Tejs 2012-04-27 14:49:25

+0

什麼都不是,這是奇怪的部分...甚至沒有未處理的異常,我想它可能會等待超時? – deanvmc 2012-04-27 14:50:05

+0

那麼,它永遠阻止? – Tejs 2012-04-27 14:50:28

回答

2

您需要關閉響應流。我看到的大多數例子也顯示了設置內容的長度。您可能會更好地序列化爲內存流,然後使用該流的長度作爲內容長度。不幸的是.net 3.5中沒有CopyStream,所以你可能需要自己編寫它。

+0

啊!這很有道理,歡呼。 – deanvmc 2012-04-27 22:08:53

0

如果您想使用HttpClient,您可以安裝下載的REST入門工具包。並使用DLL文件作爲外部DLL

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

+0

我的理解是,雖然這將與Winforms一起工作,但我會回到原來的Silverlight和WP7,這是我們正在尋找這個Web服務的兩個地方。 – deanvmc 2012-04-27 15:01:17