c# - 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 上运行它时
在本地:它返回响应中的文件(带有奇怪字符的编码文件)在开发上:它返回字节[]??
解决方案
您需要进入 Amazon API Gateway 控制台并启用二进制响应。https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-configure-with-console.html
您在控制台中所做的是说明要在请求中查看哪些 Accept 或 content-types 标头值,以确定是否可以返回二进制数据。由于您无法真正控制浏览器中的 Accept 标头,我怀疑您正在调用该标头,因此在控制台中设置通配符可能是最简单的。
推荐阅读
- c# - 为数据行列使用不同的名称,而不是 Classe 中的属性
- python - 根据 Python 中的一组索引将列表拆分为子列表
- alibaba-cloud - 消息:尝试在命令行上运行实例时,用户订单资源类型 [经典] 不存在于 [随机] 中
- vue.js - 数据中的Vue深度克隆道具没有响应
- amazon-web-services - S3 - 从 Post S3 Upload lambda 函数获取元数据
- android - Android NavigationView 只点击小区域
- c++ - 无法将“T&”类型的非常量左值引用绑定到 std::atomic 类型“T”t++ 的右值
- android - 如何使用
与视图绑定? - git - Git命令获取默认分支的最新提交
- html - 为什么我的 div 在悬停时都显示在同一位置?