【发布时间】:2023-03-25 11:40:01
【问题描述】:
我正在尝试从我的 ASP.NET Core 2 控制器返回一个 PDF 文件。 我有这个代码 (主要是借用这个SO question):
var net = new System.Net.WebClient();
//a random pdf file link
var fileLocation = "https://syntera.io/documents/T&C.pdf";/
var data = net.DownloadData(fileLocation);
MemoryStream content = null;
try
{
content = new MemoryStream(data);
return new FileStreamResult(content, "Application/octet-stream");
}
finally
{
content?.Dispose();
}
上面的这段代码是我的控制器调用的服务类的一部分。这是来自我的控制器的代码。
public async Task<IActionResult> DownloadFile(string fileName)
{
var result = await _downloader.DownloadFileAsync(fileName);
return result;
}
但我不断收到ObjectDisposedException: Cannot access a closed Stream.
try and finally 块是尝试修复它,来自另一个 SO 问题。
主要问题是 A) 这是将 PDF 文件发送回浏览器的正确方法吗?B) 如果不是,我该如何更改代码以将 pdf 发送回浏览器?
理想情况下,我不想先将文件保存在服务器上,然后再将其返回给控制器。我宁愿把它还给它,同时把所有东西都放在内存中。
【问题讨论】:
-
您添加
try/finally之前的确切代码是什么?try/finally肯定会导致ObjectDisposedException所以在你介绍它之前看看发生了什么会很有用。
标签: c# asp.net-core