Web api控制器方法在序列化Stream对象时给出异常

时间:2012-10-12 16:25:55

标签: .net json asp.net-mvc-3 stream asp.net-web-api

我有一个web api控制器方法如下:

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

我从java applet调用此方法,其中url为:

http://localhost1/api/PostMethod/1

我在第3行得到一个例外:

“此流不支持超时,'ObjectContent`1' type无法序列化内容类型'application / json的响应主体;  字符集= UTF-8' 。“

可能的解决办法是什么?如何通过Webapi控制器方法将流作为JSON对象发送?

1 个答案:

答案 0 :(得分:2)

Web Api支持内容协商,您不需要序列化对象只需返回它。

Web Api会自动将XML或Json返回给客户端,具体取决于他们要求的内容

content-type: application/json

Web浏览器通常会获得XML,而javascript则是json。你的java applet只需要上面的标题(实际上它可能已经发送了它)。

[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方法返回的内容;