2012-10-12 32 views
3

我有一個Web API控制器方法如下:的Web API控制器的方法給予例外,而序列化Stream對象

[HttpPost] 
public string PostMethod(int id) 
{ 
    Stream downloadStream = Service.downloadStream(id); 
    JavaScriptSerializer jsonSerializer = new JavaScriptSerializer(); 
    string output = jsonSerializer.Serialize(downloadStream); 
} 

我打電話從Java小程序此方法,網址爲:

http://localhost1/api/PostMethod/1 

我在第3行中發現異常,如下所示:

「此流不支持超時,'ObjectContent`1' 類型無法序列化響應body for content type'application/json; 的charset = utf-8' 「。

可能是什麼這個可能的解決方案?如何通過的WebAPI控制器的方法,JSON對象發送流?

回答

1

的Web API支持內容協商,就不需要序列化對象只返回。

網絡API會自動返回XML或JSON到客戶端取決於他們所求的

content-type: application/json 

的Web瀏覽器通常會得到XML,而如JavaScript JSON。您Java小程序只需要上面的頭(它實際上看起來可能已經發送)。

[HttpPost] 
public string PostMethod(int id) 
{ 
    Stream downloadStream = Service.downloadStream(id); 
    System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(); 
    downloadStream.CopyTo(memoryStream); 
    return memoryStream.ToString(); 
} 

這很大程度上取決於downloadStream方法返回的內容;

+0

好的,但我從小提琴手測試它。我得到異常爲downloadStream.ReadTimeout'拋出了'System.InvalidOperationException'類型的異常和一個內部異常「,'ObjectContent'1'類型未能序列化內容類型'application/json; charset = utf-8的響應主體'「。我關心的是爲什麼流對象沒有被序列化?有什麼辦法可以避免ReadTimeout異常? – user1400915

+1

流是一個打開的文件或網絡連接,序列化它是沒有意義的。它的內容是,但是流本身沒有。 – Betty

+0

謝謝,有什麼辦法可以避免ReadTimeout異常嗎?還有一件事,那我該如何返回流對象?公共流PostMethod(int id) {return stream;}反正會給我例外 – user1400915

相關問題