MVC 控制器,从 WebAPI 和 return 获取文件作为 FileResult
MVC controller, get a file from WebAPI and return as FileResult
我的控制器需要调用 WebAPI 方法,该方法将 return 内容中包含 pdf 文件的 HttpResponseMessage 对象。我需要立即 return 这个文件作为来自控制器的 FileResult 对象。
我正在尝试将周围发现的代码组合在一起的许多解决方案,但似乎所有文件保存方法都是异步的,我 运行 遇到问题 return 立即在同一控制器方法中将文件作为 FileResult .
在这种情况下最好的方法是什么?
我试过的一些代码:
System.Threading.Tasks.Task tsk = response.Content.ReadAsFileAsync(localPath, true).ContinueWith(
(readTask) =>
{
Process process = new Process();
process.StartInfo.FileName = localPath;
process.Start();
});
await tsk;
return File(localPath, "application/octetstream", fileName);
这是我的主要想法,从响应内容中获取文件并将其作为 FileResult return。但这会在 await tsk 上抛出 Access Denied。
您不必将文件作为文件保存在磁盘上,您可以像这样简单地处理 Stream:
public async Task<FileResult> GetFile()
{
using (var client = new HttpClient())
{
var response = await client.GetAsync("https://www-asp.azureedge.net/v-2017-03-27-001/images/ui/asplogo-square.png");
var contentStream = await response.Content.ReadAsStreamAsync();
return this.File(contentStream, "application/png", "MyFile.png");
}
}
希望对您有所帮助!
我的控制器需要调用 WebAPI 方法,该方法将 return 内容中包含 pdf 文件的 HttpResponseMessage 对象。我需要立即 return 这个文件作为来自控制器的 FileResult 对象。 我正在尝试将周围发现的代码组合在一起的许多解决方案,但似乎所有文件保存方法都是异步的,我 运行 遇到问题 return 立即在同一控制器方法中将文件作为 FileResult . 在这种情况下最好的方法是什么?
我试过的一些代码:
System.Threading.Tasks.Task tsk = response.Content.ReadAsFileAsync(localPath, true).ContinueWith(
(readTask) =>
{
Process process = new Process();
process.StartInfo.FileName = localPath;
process.Start();
});
await tsk;
return File(localPath, "application/octetstream", fileName);
这是我的主要想法,从响应内容中获取文件并将其作为 FileResult return。但这会在 await tsk 上抛出 Access Denied。
您不必将文件作为文件保存在磁盘上,您可以像这样简单地处理 Stream:
public async Task<FileResult> GetFile()
{
using (var client = new HttpClient())
{
var response = await client.GetAsync("https://www-asp.azureedge.net/v-2017-03-27-001/images/ui/asplogo-square.png");
var contentStream = await response.Content.ReadAsStreamAsync();
return this.File(contentStream, "application/png", "MyFile.png");
}
}
希望对您有所帮助!