当前位置: 首页 > 知识库问答 >
问题:

如何在ASP.NET WebAPI中返回文件(FileContentResult)

颜哲彦
2023-03-14

在常规MVC控制器中,我们可以使用FileContentResult输出pdf。

public FileContentResult Test(TestViewModel vm)
{
    var stream = new MemoryStream();
    //... add content to the stream.

    return File(stream.GetBuffer(), "application/pdf", "test.pdf");
}

但是如何将其更改为apicontroller呢?

[HttpPost]
public IHttpActionResult Test(TestViewModel vm)
{
     //...
     return Ok(pdfOutput);
}
[HttpGet]
public IHttpActionResult Test()
{
    var stream = new MemoryStream();
    //...
    var content = new StreamContent(stream);
    content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
    content.Headers.ContentLength = stream.GetBuffer().Length;
    return Ok(content);            
}
{"Headers":[{"Key":"Content-Type","Value":["application/pdf"]},{"Key":"Content-Length","Value":["152844"]}]}

So上也有一篇类似的文章:在ASP.NET Web API中从控制器返回二进制文件。它讨论输出一个现有的文件。但我不能让它和溪流一起工作。

有什么建议吗?

共有1个答案

夏振国
2023-03-14

我可以将StreamContent作为Content返回,而不是返回StreamContent,而是使用BytearrayContent

[HttpGet]
public HttpResponseMessage Generate()
{
    var stream = new MemoryStream();
    // processing the stream.

    var result = new HttpResponseMessage(HttpStatusCode.OK)
    {
        Content = new ByteArrayContent(stream.ToArray())
    };
    result.Content.Headers.ContentDisposition =
        new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment")
    {
        FileName = "CertificationCard.pdf"
    };
    result.Content.Headers.ContentType =
        new MediaTypeHeaderValue("application/octet-stream");

    return result;
}
 类似资料:
  • 问题内容: 我有一个档案 用户来 我希望用户的浏览器开始下载文件。我怎么做?readfile是否在服务器上打开文件,这似乎是不必要的事情。有没有一种方法可以在不打开服务器的情况下返回文件? 问题答案: 我想你想要这个:

  • 问题内容: 有什么方法可以追溯到Eclipse吗?基本上,当我按照执行流程(Ctrl +单击等)在一个大项目中跳来跳去时,有没有办法追溯步骤?如果我的代码调用一个方法,然后转到方法定义,是否有组合键可以将我带回到调用代码? 问题答案: 像在网络浏览器中一样按+ 和+ 。

  • 我知道同样的问题已经被问了很多次,但是通过已经发布的所有答案,我找不到解决方案。 首先,以下是我在项目中遇到问题后用来测试该问题的代码: 因此,根据标题,这些对getResourceAsStream()的调用都返回null,但只有在执行jar文件时,在IDE(Netbean 8.0.2)内启动时,它们都返回正确的流(单独测试不使用这段代码),我可以使用它。 所以我现在真的很困惑,我在使用netbe

  • 一开始在浏览器运行Vue文件还可以的,之后写了HTML文件并运行后发现无论如何都无法回到原来的Vue文件了 尝试: 结果:

  • 问题内容: 我有一种生成带有一些数据库记录的CSV文件的方法 我希望该方法是一个端点,以便从任何类型的客户端(Web或移动设备)调用它以下载它。在Google Cloud Endpoint文档中 ,没有关于File作为有效返回类型的信息。我如何创建并终结返回文件的文件? 问题答案: 这是将文件从端点保存到Cloud Storage并返回用于下载文件的URL的方法。 1 /在您的项目控制台中激活Go

  • 本文向大家介绍如何在PHP中回显XML文件,包括了如何在PHP中回显XML文件的使用技巧和注意事项,需要的朋友参考一下 在PHP包装程序的帮助下,HTTP URL可以像本地文件一样使用。可以通过file_get_contents()来获取URL中的内容,并且可以将其回显。或使用readfile函数读取。 以下是执行相同操作的示例代码- 下面展示了一个替代方案- 也可以使用asXML方法。以下是示例