【问题标题】:Has anyone had any luck getting a .NET 6 REST API project to work in an AWS Lambda?有没有人有幸让 .NET 6 REST API 项目在 AWS Lambda 中工作?
【发布时间】:2022-09-23 05:29:45
【问题描述】:

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

[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 类;该功能移至隐式 Program 类。所以在我的LambdaEntryPoint 类(继承自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 类唯一不同的是我必须在底部添加public partial class Program { },这样单元测试才能找到Program 并运行。

我的测试事件如下所示:

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

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

    标签: c# amazon-web-services asp.net-web-api aws-lambda


    【解决方案1】:

    您没有 Startup 类这一事实并不意味着您不能制作一个,我在 .NET 6 中为我的 API 制作了一个 Startup 类,它工作正常

    【讨论】:

    • - 感谢您的回复。当您说“我在 .NET 6 中为我的 API 创建了一个 Startup 类并且它运行良好”时,您是指一般的 API 项目,还是在 AWS Lambda 上下文中,这是我遇到问题的地方?
    • 我的意思是在 AWS Lambda 上下文中
    【解决方案2】:

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

    这是如果您使用的是 REST API 或 API GATEWAY

    builder.Services.AddAWSLambdaHosting(Lambda EventSource.Rest Api);

    这是如果您使用带有 url 的 lambda

    builder.Services.AddAWSLambdaHosting(LambdaEventSource.HttpApi);

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

    See the example here in aws

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-20
      • 2013-07-21
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多