首页 > 解决方案 > 为什么 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 是一个巨大的文件,并且可能缺少其他文本。

附加说明:我尝试了以下

标签: c#arraysjsonaws-lambdaresponse

解决方案


鉴于问题表现为格式问题,根本原因很可能与您正在运行的 AWS Lambda 实例中的文化有关。

当涉及到云部署时,这是一个非常常见的罪魁祸首,因为您机器上使用的仿真工具使用机器的本地文化,这通常与云环境不同。平台之间也可能存在基于其功能的文化差异,例如,Windows 和 Unix 的俄语列表分隔符不同

在继续调查环境或应用程序之前,应始终在给定环境中诊断其应用程序的输出。

对于像字节数组这样的大数据集,比较单个字节可能是不可行的,但产生哈希值并查看环境之间是否存在差异可能是值得的。


推荐阅读