首页 > 解决方案 > API 控制器在 AWS lambda 上托管后不返回文件

问题描述

我们遇到了一个问题,即当作为 AWS lambda 包托管时,文件无法正确下载。

.Net Core API GET 返回的端点

    [HttpGet()]
    [Route("ABC")]
    public async Task<IActionResult> ABC(string id)
    {  byte[] con = GetFileContent(id);
       var fileName = GetFileName(id);
       return File(con, "application/octet-stream", filename);     
    }

当我们在本地主机(IISExpress)上运行它时,它会返回包含内容的文件

但是,当将相同内容构建到 AWS lambda 包中并进行部署时,它会下载文件但文件未打开并给出错误等错误

我们是否需要在 lambda 中设置一些内容以允许此下载正常工作?

另外,当我们在 POSTMan 上运行它时

在本地:它返回响应中的文件(带有奇怪字符的编码文件)在开发上:它返回字节[]??

标签: c#asp.net-coreaws-lambda

解决方案


您需要进入 Amazon API Gateway 控制台并启用二进制响应。https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-configure-with-console.html

您在控制台中所做的是说明要在请求中查看哪些 Accept 或 content-types 标头值,以确定是否可以返回二进制数据。由于您无法真正控制浏览器中的 Accept 标头,我怀疑您正在调用该标头,因此在控制台中设置通配符可能是最简单的。


推荐阅读