【问题标题】:MVC controller, get a file from WebAPI and return as FileResultMVC 控制器,从 WebAPI 获取文件并作为 FileResult 返回
【发布时间】:2017-04-13 11:34:41
【问题描述】:

我的控制器需要调用一个 WebAPI 方法,该方法将返回一个 HttpResponseMessage 对象,内容中包含一个 pdf 文件。我需要立即将此文件作为控制器的 FileResult 对象返回。 我正在尝试从到处找到的代码中组合起来的许多解决方案,但似乎所有文件保存方法都是异步的,我遇到了在同一个控制器方法中立即将文件作为 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 返回。但这会在等待 tsk 上引发 Access Denied。

【问题讨论】:

  • 你能分享你已经尝试使用的代码吗?
  • 一团糟,我不知道该添加什么...我将添加一些代码。

标签: asp.net-mvc file download asp.net-web-api2 fileresult


【解决方案1】:

您不必将磁盘上的文件另存为文件,您可以像这样简单地处理 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");
    }
}

希望有帮助!

【讨论】:

  • 我把它弄复杂了!谢谢阿德里安!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多