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()。