我有一个 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/