1

我正在尝试编写一个控制器,该控制器创建并向返回图像的服务发出 HttpWebRequest。然后我想将此图像作为 FileResult 返回。我该怎么做。我已经尝试了下面的代码,但它返回一个损坏的图像而不是完整的图像:

public FileResult SomeAction()
{
    var request = Make some request here

    using (var response = (HttpWebResponse)request.GetResponse())
    {
        string contentType = response.ContentType;
        return File(response.GetResponseStream(),contentType);
    }
}

谢谢

4

1 回答 1

4

由于您没有提及“它不起作用”,我只能告诉您,总的来说,您正在做的事情应该起作用。但是,我不确定实际读取响应流的位置。由于您将 return 放在 using 中,因此可能是在实际读取流之前处理了流。尝试删除 using 语句,然后执行以下操作:

var response = request.GetResponse();
File(response.GetResponseStream(), response.ContentType);

如果这不起作用,则验证响应实际上返回的是内容类型和有效的流。

编辑:

看来我是对的,如果将文件流包装在 using 中,文件流在读取之前会被关闭。您不必担心处理流,因为 File 会在处理完后处理它。

请参阅另一个问题:

在 ASP.NET 中实现文件下载时如何处理我的文件流?

于 2012-04-26T22:42:08.467 回答