.net - Web api Controller 方法在序列化 Stream 对象时给出异常

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

我有一个 web api Controller 方法如下:

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

我从带有 url 的 java applet 调用这个方法:
http://localhost1/api/PostMethod/1

我在第 3 行收到一个异常,如下所示:

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

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

最佳答案

Web Api 支持内容协商,不需要序列化对象,直接返回即可。

Web Api 将根据客户端的要求自动返回 XML 或 Json 给客户端

content-type: application/json

Web 浏览器通常会获得 XML,而作为 javascript Json。您的 Java 小程序只需要上面的 header (它实际上看起来可能已经发送了)。
[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 方法返回的内容;

关于.net - Web api Controller 方法在序列化 Stream 对象时给出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12863311/

相关文章:

c# - CA2227 With Dictionary 解决方法是什么?

javascript - Razor 语法和 Javascript

c# - 获取 Windows 8 任务管理器报告的内存使用情况

.net - 如何知道我是否在运行 GAC?

.net - 如何基于外部事件可靠地创建工作流实例?

java - 接受不同类型的 JSON 数组输入?

c++ - 为什么 JSON 对象不是数组?

C#.NET 命名空间名称在命名空间错误中不存在 - 仅当使用在本地命名空间指令之外时 - 为什么?

javascript - 将Python字典转换为不带字符串键的JSON对象

asp.net-mvc-3 - 如何将 “Class Library Project” 更改为 “Test Project"?