.NET 6 WebAPI部署AWS Lambda时控制器构造失败排查
问题解决:.NET 6 WebAPI部署AWS Lambda报MissingMethodException错误
核心原因
你当前的Lambda配置和使用的Amazon.AspNetCoreLambda.Hosting托管模式冲突了:
AddAWSLambdaHosting是用来把整个ASP.NET Core WebAPI应用托管到Lambda的模式,此时Lambda会作为Web服务器处理HTTP请求,遵循WebAPI的路由和依赖注入规则。- 但你设置的Handler
Example::Example.Controllers.WeatherForecastController::Get是Lambda的传统单函数模式,这种模式下Lambda运行时会尝试直接实例化控制器类,而你的控制器依赖ILogger<WeatherForecastController>,没有无参构造函数,所以触发MissingMethodException。
解决步骤
修正Lambda的Handler配置
将Handler改为指向程序的入口点:Example::Example.Program::Main如果你用了.NET 6的顶级语句(即Program.cs里没有显式的
Program类和Main方法),也可以直接填程序集名称Example,Lambda运行时会自动识别入口点。确认部署包构建正确
用以下命令生成发布包,确保包含所有依赖:dotnet publish -c Release -o ./publish然后将
publish目录下的所有文件打包成zip上传到Lambda。关联正确的事件源
因为你用了LambdaEventSource.HttpApi,需要将Lambda与AWS Http API(不是REST API)关联,通过Http API的端点来访问你的WebAPI接口,而不是直接在Lambda控制台测试单个控制器方法。
额外说明
- 如果想使用Lambda单函数模式(直接调用控制器方法),需要移除
AddAWSLambdaHosting配置,并且给控制器添加无参构造函数(但不推荐,会破坏依赖注入),或者改用Lambda函数类来处理请求。 - 推荐使用ASP.NET Core托管模式,这样可以保留WebAPI的所有特性(路由、依赖注入、中间件等),和本地开发体验一致。
内容的提问来源于stack exchange,提问作者numberjak
相关产品推荐
相关产品推荐

