You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何测试简单AWS Lambda函数?.NET Lambda控制台测试序列化错误排查

问题分析与解决方案

你的问题核心在于Lambda函数的输入参数类型和测试事件的JSON格式不匹配,让我一步步给你拆解:

为什么会报错?

你的函数FunctionHandler的第一个参数是string name,这意味着AWS Lambda期望接收的是一个纯JSON字符串(比如"sample text"),但你传的是一个JSON对象{ "name": "sample text" }。

Lambda的序列化器(这里是System.Text.Json)尝试把整个JSON对象转换成string类型,自然会失败——因为它只能把带引号的纯字符串转成string,而对象是StartObject类型,没法直接转成string,这就是错误日志里Cannot get the value of a token type 'StartObject' as a string.的原因。

至于本地测试正常,是因为VS.NET的Lambda测试工具可能帮你做了自动适配,或者你本地测试时传的就是纯字符串,没注意到格式差异。

两种解决方案

方案1:修改测试事件为纯JSON字符串

把你的测试事件改成:

"sample text"

这样序列化器就能正确把它转换成string类型,函数就能正常执行了。

方案2:修改函数参数为自定义类(更推荐)

如果你的业务场景确实需要接收键值对形式的输入,更规范的做法是定义一个匹配输入结构的类,让Lambda自动把JSON对象反序列化成这个类的实例:

首先定义输入类:

namespace HelloWorld { 
    public class SayHiInput
    {
        public string Name { get; set; }
    }

    public class SayHi { 
        public string FunctionHandler(SayHiInput input, ILambdaContext context) { 
            return input?.Name?.ToUpper(); 
        } 
    } 
}

然后你的测试事件{ "name": "sample text" }就能正常工作了(注意JSON里的键名name和类的属性Name大小写不影响,System.Text.Json默认是不区分大小写的)。

这个方案更适合复杂的输入场景,扩展性更强,也是AWS Lambda开发的最佳实践之一。

内容的提问来源于stack exchange,提问作者vmasanas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 05:42:37