Web Api 控制器中的内部服务器错误
Internal server error in Web Api controller
我有 api 控制器,它接收字节,并发送字节作为应答。
public class RenderController : ApiController
{
[HttpPost]
public async Task<HttpResponseMessage> Post(string id)
{
var bytes = await Request.Content.ReadAsByteArrayAsync();
IoSys.Root = new IoSys {InputStream = new MemoryStream(bytes)};
var model = new DrawingChain().Load();
IoSys.Root.CloseIn();
using (var result = Request.CreateResponse(HttpStatusCode.OK))
{
using (var stream = new MemoryStream())
{
result.Content = new StreamContent(stream)
{
Headers = {ContentType = new MediaTypeHeaderValue("application/octet-stream")}
};
IoSys.Root = new IoSys {OutputStream = stream};
model.Save();
return result;
}
}
}
在返回结果的那一行,客户端收到 500 错误。我想,我没有正确使用流。
using 语句等同于 try..finally 块。所以本质上它是在返回之前处理 result 对象。
这是一个相关的 SO 线程:
正在 returns 之前处理对象。尝试以这种方式更新您的代码:
[HttpPost]
public async Task<HttpResponseMessage> Post(string id)
{
var bytes = await Request.Content.ReadAsByteArrayAsync();
IoSys.Root = new IoSys {InputStream = new MemoryStream(bytes)};
var model = new DrawingChain().Load();
IoSys.Root.CloseIn();
var stream = new MemoryStream() // Is it right here?
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = = new StreamContent(stream);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
IoSys.Root = new IoSys {OutputStream = stream};
model.Save();
return result;
}
请测试一下。根据您的代码,您正在为响应分配一个没有内容的新 MemoryStream()。
我有 api 控制器,它接收字节,并发送字节作为应答。
public class RenderController : ApiController
{
[HttpPost]
public async Task<HttpResponseMessage> Post(string id)
{
var bytes = await Request.Content.ReadAsByteArrayAsync();
IoSys.Root = new IoSys {InputStream = new MemoryStream(bytes)};
var model = new DrawingChain().Load();
IoSys.Root.CloseIn();
using (var result = Request.CreateResponse(HttpStatusCode.OK))
{
using (var stream = new MemoryStream())
{
result.Content = new StreamContent(stream)
{
Headers = {ContentType = new MediaTypeHeaderValue("application/octet-stream")}
};
IoSys.Root = new IoSys {OutputStream = stream};
model.Save();
return result;
}
}
}
在返回结果的那一行,客户端收到 500 错误。我想,我没有正确使用流。
using 语句等同于 try..finally 块。所以本质上它是在返回之前处理 result 对象。
这是一个相关的 SO 线程:
正在 returns 之前处理对象。尝试以这种方式更新您的代码:
[HttpPost]
public async Task<HttpResponseMessage> Post(string id)
{
var bytes = await Request.Content.ReadAsByteArrayAsync();
IoSys.Root = new IoSys {InputStream = new MemoryStream(bytes)};
var model = new DrawingChain().Load();
IoSys.Root.CloseIn();
var stream = new MemoryStream() // Is it right here?
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = = new StreamContent(stream);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
IoSys.Root = new IoSys {OutputStream = stream};
model.Save();
return result;
}
请测试一下。根据您的代码,您正在为响应分配一个没有内容的新 MemoryStream()。