【问题标题】:Pass PDF result to another web api in ASP.NET Core将 PDF 结果传递给 ASP.NET Core 中的另一个 Web api
【发布时间】:2017-06-06 20:28:19
【问题描述】:

我有一个 web api,可以检索存储在数据库中的 PDF 文件。

[HttpGet("file/{id}")]
public IActionResult GetFile(int id)
{
    var file = dataAccess.GetFileFromDB(id);

    HttpContext.Response.ContentType = "application/pdf";
    FileContentResult result = new FileContentResult(file, "application/pdf")
    {
        FileDownloadName = "test.pdf"
    };

    return result;
}

我需要编写一个包装器 web api,它将上述 web api 的结果传递给客户端。

使用 .NET Core 实现这一目标的最佳方法是什么?我应该从上面的 web api 返回字节数组并将字节数组转换为包装器 api 中的 FileContentResult 吗?

任何代码示例都会很有帮助。

谢谢。

【问题讨论】:

  • 你真的想要一个代理吗?
  • 是的,有点。客户端(Angular 2)调用 wrapper web api 内部调用 db web apis 来检索数据。
  • .NET Core 最简单的方法是使用 this project 作为实现的基础(它使用中间件)。还是有理由重新实现另一个 API?
  • 包装 API 还负责其他一些事情,所以很遗憾我必须使用包装 API。

标签: c# pdf asp.net-web-api asp.net-core-webapi


【解决方案1】:

您可以尝试将来自HttpClient 的响应重新路由给用户:

using System.Net.Http;
using Microsoft.AspNetCore.Mvc;

public class TestController : Controller
{
    public async Task<IActionResult> Get()
    {
        using (var client = new HttpClient())
        {
            var response = await client.GetAsync("http://apiaddress", HttpCompletionOption.ResponseHeadersRead); // this ensures the response body is not buffered

            using (var stream = await response.Content.ReadAsStreamAsync()) 
            {
                return File(stream, "application/pdf");
            }
        }
    }
}

【讨论】:

  • 谢谢,我试试。只是想知道,它会读取两次 PDF 内容吗?即一个在 db api 级别,另一个在 wrapper api 级别。
  • 当然可以,但第二次应该直接将其流式传输到客户端。
猜你喜欢
  • 1970-01-01
  • 2020-06-26
  • 2015-12-23
  • 1970-01-01
  • 2017-01-16
  • 2012-09-01
  • 2014-03-05
  • 1970-01-01
  • 2016-07-06
相关资源
最近更新 更多