我的ActionResult
会返回File
,但我还需要它有条件地返回Stream
。
我无法找到有关ActionResult
如何返回Stream
的文档。
以下是我返回文件的代码:
return File(memoryStream,.... )
如上所述,我只需要返回Stream
。
答案 0 :(得分:32)
MemoryStream stream = someService.GetStream();
return new FileStreamResult(stream, "application/pdf")
答案 1 :(得分:6)
动作调用另一个动作是设计气味。你应该避免它。简单地说,需要在服务层中的2个动作之间重用逻辑。然后从你的2个动作中调用这个逻辑。
例如:
public ActionResult Action1()
{
Stream stream = service.GetStream();
// ... do something with the stream and return a view for example
return View();
}
public ActionResult Action2()
{
Stream stream = service.GetStream();
// let's return the stream to the client so that he could download it as file
return File(stream, "application/pdf");
}
现在您不再需要从第一个动作中调出第二个动作。
答案 2 :(得分:4)
在Stream
中使用Controller
作为操作方法的结果的最短方法是您已在问题中展示的方法:使用File
FileStreamResult
辅助方法1}}。这将返回text/plain
。
有几个可用的重载需要Controller
。两个重载都需要指定响应的MIME类型,它将作为响应的Stream
标头发出;如果您的情况是您的应用程序未知的情况,则可以始终分别为任意文本或二进制数据指定application/octet-stream
或Content-Disposition
。一个重载还需要第三个参数,设置文件名以在浏览器的下载对话框中显示(通过answer标题控制),如果适用的话。
重载签名:
Content-Type
和
protected internal FileStreamResult File(
Stream fileStream,
string contentType
)
使用示例:
protected internal virtual FileStreamResult File(
Stream fileStream,
string contentType,
string fileDownloadName
)
或
return File(myStream, "application/pdf");