繁体   English   中英

有没有人有幸让 .NET 6 REST API 项目在 AWS Z04A7DA3C5B05CAD85DA1EEBB923 中工作?

[英]Has anyone had any luck getting a .NET 6 REST API project to work in an AWS Lambda?

我有一个非常简单的 ASP.NET 6.0 Web API 应用程序,带有一个 Home Get方法返回文本:

[ApiController]
[Route("[controller]")]
public class HomeController : Controller
{
    // GET
    [HttpGet]
    public IActionResult Get()
    {
        return Ok(new { message = "Hello, World!" });
    }
}

我已经能够让 ASP.NET 项目 < 6.0 工作,但是使用 .NET 6 我遇到了问题。 不再有Startup class; 该功能移至隐式Program class。 所以在我的LambdaEntryPoint class (继承自APIGatewayProxyFunction )中,我使用Program作为启动:

    protected override void Init(IWebHostBuilder builder)
    {
        builder.UseStartup<Program>();
    }

从 AWS 控制台手动测试时出现错误: Amazon.Lambda.RuntimeSupport.ExceptionHandling.LambdaValidationException: Unable to load assembly. 我相信我的命名是正确的: MyAssembly::MyAssembly.LambdaEntryPoint::FunctionHandlerAsync

我的Program class 唯一不同的是我必须在底部添加public partial class Program { }以便单元测试可以找到Program并运行。

我的测试事件如下所示:

{
  "resource": "/Home",
  "path": "/Home",
  "httpMethod": "GET",
  "isBase64Encoded": true
}

它是默认Amazon API Gateway AWS Proxy的精简版

The fact that you don't have a Startup class doesn't mean you can't make one, I made a Startup class for my API in .NET 6 and it works fine

您不需要添加 Startup.cs class。 如果您使用 NET6,您唯一需要做的就是在 Program.cs 文件中添加这行代码。

如果您使用的是 rest API 或 API GATEWAY

builder.Services.AddAWSLambdaHosting(LambdaEventSource.RestApi);

这是如果您将 lambda 与 url 一起使用

builder.Services.AddAWSLambdaHosting(LambdaEventSource.HttpApi);

..在aws中,您只需使用项目名称更改处理程序即可。 我的程序集

在 aws 中查看示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM