我的ActionResult
回报 aFile
但我也需要它有条件地回报 a Stream
。
我无法找到有关 anActionResult
如何返回Stream
.
这是我返回文件的代码:
return File(memoryStream,.... )
如前所述,我只需要返回一个Stream
.
我的ActionResult
回报 aFile
但我也需要它有条件地回报 a Stream
。
我无法找到有关 anActionResult
如何返回Stream
.
这是我返回文件的代码:
return File(memoryStream,.... )
如前所述,我只需要返回一个Stream
.
我之前的回答已经过时了。
截至目前,File
不同类型的 ActionResult 返回取决于给定的参数
// to return FileStreamResult
return File(memoryStream, "application/pdf");
// or..
return File(memoryStream, "application/pdf", "file_name");
MemoryStream stream = someService.GetStream();
return new FileStreamResult(stream, "application/pdf")
让一个动作调用另一个动作是一种设计味道。你应该避免它。只需将需要在服务层中的 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");
}
现在您不再需要从第一个操作调用第二个操作。
Stream
在 a中使用 Action 方法的结果的最短方法Controller
是您在问题中已经展示的方法:File
使用Controller
. 这会返回一个FileStreamResult
.
有几个可用的重载需要Stream
. 两种重载都需要指定响应的 MIME 类型,它将作为Content-Type
响应的标头发出;如果您的情况是您的应用程序不知道这一点,您总是可以分别为任意文本或二进制数据指定text/plain
或。application/octet-stream
如果适用,一个重载还需要第三个参数,该参数设置要在浏览器的下载对话框中显示的文件名(通过Content-Disposition
标题控制)。
重载签名:
protected internal FileStreamResult File(
Stream fileStream,
string contentType
)
和
protected internal virtual FileStreamResult File(
Stream fileStream,
string contentType,
string fileDownloadName
)
示例用法:
return File(myStream, "application/pdf");
或者
return File(myStream, "application/pdf", "billing-summary.pdf");