【问题标题】:MVC ASP.NET Return response.GetResponseStream() as FileResultStreamMVC ASP.NET 返回 response.GetResponseStream() 作为 FileResultStream
【发布时间】:2023-03-27 04:11:01
【问题描述】:

我正在尝试编写一个控制器,该控制器创建并向返回图像的服务发出 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);
    }
}

谢谢

【问题讨论】:

  • 我遇到了类似的问题。这个帖子有帮助吗:stackoverflow.com/questions/9185494/…
  • 我试图避免直接使用 HttpContext.Response.OutputStream。
  • 说“它不起作用”就像去找汽车修理工说“它发出有趣的声音”。
  • 它返回一个损坏的图像结果,而不是完整的图像

标签: asp.net-mvc-3 c#-4.0 stream httpwebresponse fileresult


【解决方案1】:

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

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

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

编辑:

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

查看其他问题:

How do I dispose my filestream when implementing a file download in ASP.NET?

【讨论】:

    猜你喜欢
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    • 2011-03-08
    相关资源
    最近更新 更多