0

我正在使用 Web api 控制器,如下所示:

[HttpPost]    
public HttpResponseMessage PostMethod(string filename)    
{
    Stream downloadStream = BL.method(fileName);    
    HttpResponseMessage response = new HttpResponseMessage();    
    response.content= new StreamContent(downloadStream);    
    return response;    
}

当我尝试使用提琴手调用上述方法时,我收到一个异常消息

“downloadStream.ReadTimeout”引发了“System.InvalidOperationException”类型的异常。

可以设置流作为响应并发送吗?上面的代码有修改吗?

4

2 回答 2

0

尝试使用 PushStreamContent,也许通过不在内存中缓冲文件,您可能会避免超时。

    [HttpPost]
    public HttpResponseMessage PostMethod(string filename)
    {
        Stream downloadStream = BL.method(fileName);
        HttpResponseMessage response = new HttpResponseMessage();
        response.Content = new PushStreamContent((responseStream, httpContent, tc) => {
                                                     downloadStream.CopyTo(responseStream);
                                                     responseStream.Close();
                                                 }, "application/octet-stream");

        return response;
    }
于 2012-10-13T15:55:49.710 回答
0

您的信息流似乎有问题。不知道流是如何产生的,很难说。如果您BL.method(fileName);只使用自己加载文件替换FileStream它应该可以工作(我只是自己测试过)。

在旁注中,您的方法存在一些问题:

  1. 您使用 POST。因为你没有改变任何东西,所以 GET 更好。
  2. 您没有设置ContentType标头,因此客户端在使用资源时可能会遇到问题
  3. 您没有处理流,因此该流可能会处于不确定状态并且通常不好。
于 2012-10-13T12:39:20.463 回答