找不到方法-AWS.NET Core 3.1模拟Lambda测试工具



我正在尝试使用/设置AWS.NET Core 3.1模拟Lambda测试工具。

目前,我将通过该工具启动应用程序,然而,一旦我尝试发送请求,我就会收到错误"找不到方法Init"。

aws-lambda-tools-defaults.json内部,我将function-handler设置为以下值:

"function-handler": "Some.Example.Assembly::Some.Example.Namespace.LambdaProgram::Init"

LambdaProgram.cs文件如下所示:

using Amazon.Lambda.AspNetCoreServer;
using Microsoft.AspNetCore.Hosting;
namespace Some.Example.Namespace
{
public class LambdaProgram : APIGatewayHttpApiV2ProxyFunction
{
protected override void Init(IWebHostBuilder builder)
{
builder.UseStartup<Startup>();
}
}
}

除非我误读了文件,否则格式对我来说似乎是正确的?

bin/目录中,dll和exe具有匹配的名称,即"Some.Example.Assembly.exe"&"某些.Example.Passembly.dll".

如果我更改function-handler路径,那么我可以让它为该类型抛出一个错误。但我不明白为什么它找不到函数Init?应用程序构建,LambdaProgram正在根据需要实现AWS接口。

任何帮助都将是惊人的,我真的希望能够在部署之前在本地测试/调试(这是一个现有的生产应用程序-这只是lamabda迁移的一个例子(

在完全困惑了几个小时之后,我找到了解决方案。这可能在文档中,我没有看到它,但function-handler不是LambdaProgram类中的函数(或者您称之为您的函数(。

相反,您应该使用FunctionHandlerAsync,我想它正在被继承。

我通过克隆官方存储库并查看他们的样本发现了这一点,其中有一条评论对此进行了详细说明!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using System.IO;
namespace BlueprintBaseName._1
{
/// <summary>
/// This class extends from APIGatewayProxyFunction which contains the method FunctionHandlerAsync which is the 
/// actual Lambda function entry point. The Lambda handler field should be set to
/// 
/// BlueprintBaseName.1::BlueprintBaseName.1.LambdaEntryPoint::FunctionHandlerAsync
/// </summary>
public class LambdaEntryPoint : Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction
protected override void Init(IWebHostBuilder builder)
{
builder
.UseStartup<Startup>();
}
}
}

最新更新