c# - 为什么 AWS Lambda 函数从后端返回不同的响应值?
问题描述
后端:我正在使用AWS Lambda Project .NET Core C#
在后端,我返回如下代码:
var response = new APIGatewayProxyResponse
{
StatusCode = (int)HttpStatusCode.OK,
Body = Convert.ToBase64String(fooByteArray),
IsBase64Encoded = true,
Headers = new Dictionary<string, string> { { "Content-Type", 'application/pdf' }, { "Access-Control-Allow-Origin", "*" } },
};
return response;
当我在Mock Lambda Test Tool中进行测试时,它返回的值是正确的(我可以将字符串复制粘贴到前端,它将返回正确的 PDF 值)。
但是,当我在 AWS lambda 中部署它时,响应值发生了变化(变小)并且在 PDF 中有一些奇怪的数据(例如,假设值是 12.00 美元,它现在返回 12.000 美元)
我尝试了一切,例如我通常使用的:
Body = JsonConvert.SerializeObject(fooBytesWrappedInModelClass, new JsonSerializerSettings() { ReferenceLoopHandling = ReferenceLoopHandling.Ignore }),
最后,它总是返回那奇怪的 12.000 美元。我不想在前端进行 hack 修复来处理额外的零,因为 PDF 是一个巨大的文件,并且可能缺少其他文本。
附加说明:我尝试了以下
- 将字节数组直接转换为 Json 序列化对象
- 将字节数组转换为十六进制(lambda 仍然缺少响应值)
- 问题在于 Lambda 本身(因为那里的值已经不同)而不是 Api Gateway
- PDF 字节数组响应范围为 200K 到 320K
- 320K 1 中缺少的响应量为 12K 字符
解决方案
鉴于问题表现为格式问题,根本原因很可能与您正在运行的 AWS Lambda 实例中的文化有关。
当涉及到云部署时,这是一个非常常见的罪魁祸首,因为您机器上使用的仿真工具使用机器的本地文化,这通常与云环境不同。平台之间也可能存在基于其功能的文化差异,例如,Windows 和 Unix 的俄语列表分隔符不同。
在继续调查环境或应用程序之前,应始终在给定环境中诊断其应用程序的输出。
对于像字节数组这样的大数据集,比较单个字节可能是不可行的,但产生哈希值并查看环境之间是否存在差异可能是值得的。
推荐阅读
- spring-boot - 如何通过现有值在分页中选择自定义页面?
- angular - heroku local 可以正常工作,但不能在线(Ionic 和 firebase 后端)
- fetch - javascript post fetch 请求出错
- primitive-types - 无法在 Java15 中声明 point() 类型
- c# - 无法加载文件或程序集'Samsung.Sap 版本 = 1.0.0.0
- python - 如何使用 tkinter selenium 自动填写表单?
- uima - uima wordlist 缺少条目
- python - 使用 BeautifulSoup 检测文本的存在
- c++ - 以std :: function作为c ++中的参数的selectionSort
- php - PHP 中的 SQL 循环到 JSON,有 2 个表,基于相关表的 id