微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 asp.net core 的无服务器模板的 aws lambda 函数

如何解决使用 asp.net core 的无服务器模板的 aws lambda 函数

我对 aws 没有足够的了解,但我的公司要求我做一份工作,我猜这就是 AWS Lambda 的完美表现。要求是我必须创建一个服务,该服务的端点需要每天调用两次。我遵循的方法是我通过 Visual Studio 创建了一个无服务器 Web API,并为每个端点创建了 API 网关端点。然后通过云监视事件添加一个触发器,每天运行两次,但每当触发该功能时,我都会收到此错误

Object reference not set to an instance of an object.: NullReferenceException
   at Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction.MarshallRequest(InvokeFeatures features,APIGatewayProxyRequest apiGatewayRequest,ILambdaContext lambdaContext)
   at Amazon.Lambda.AspNetCoreServer.AbstractAspNetCoreFunction`2.FunctionHandlerAsync(TREQUEST request,ILambdaContext lambdaContext)
   at lambda_method(Closure,Stream,LambdaContextInternal )

解决方法

我有同样的问题,最近可以解决。

如果您将 Lambda 与 ASP.NET Core 一起使用,您应该拥有 LambdaEntryPoint 类来处理所有请求。 尝试覆盖此类中的 MarshallRequest 方法,添加日志记录并查看 apiGatewayRequest 参数中的内容。代码可能如下所示:

protected override void MarshallRequest(InvokeFeatures features,APIGatewayProxyRequest apiGatewayRequest,ILambdaContext lambdaContext)
{
    LambdaLogger.Log($"Request path: {apiGatewayRequest.Path}");
    LambdaLogger.Log($"Request path parameters: {apiGatewayRequest.PathParameters}");
    LambdaLogger.Log($"Request body: {apiGatewayRequest.Body}");
    LambdaLogger.Log($"Request request context: {apiGatewayRequest.RequestContext}");
    base.MarshallRequest(features,apiGatewayRequest,lambdaContext);
}

就我而言,所有这些值都是空值。其原因是使用 Amazon EventBridge 保持 Lambda 在线以避免冷启动。如果您还使用 EventBridge,请尝试在那里正确配置请求。如果没有,您可以尝试通过以下方式更新 MarshalRequest

protected override void MarshallRequest(InvokeFeatures features,ILambdaContext lambdaContext)
{
    if(apiGatewayRequest.RequestContext == null) //Or other property
    {
        return;
    }

    base.MarshallRequest(features,lambdaContext);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。