AWS API Gateway .NET 6 Web API with SPA (Angular) 从 wwwroot 托管并出现 UseStaticFiles() 错误

AWS API Gateway .NET 6 Web API with SPA (Angular) hosted from wwwroot with UseStaticFiles() error

我们已经将 .NET 6 Web API 项目部署到 API 网关后面的 AWS Lambda,利用无服务器框架和 Lambda 代理集成方法 运行 Web API Lambda 中的项目。我们通常在 AWS S3 之外托管相应的 SPA,但决定通过 wwwroot 文件夹和 [=25= 中的 UseStaticFiles() 在后端为 Angular SPA 使用 including/hosting 静态资产].此外,我们正在使用与我们的 API 网关关联的自定义域名(例如 dev.myapp.com)。

当我们使用“/index.html”(例如 https://dev.myapp.com/index.html)向我们的域发出请求时,我们成功访问并使用了 Angular 应用程序,但当我们不这样做时包括“/index.html”(所以只是 dev.myapp.com)我们得到一个错误响应:

{"message":"Missing Authentication Token"}

我认为这可能与 Startup.cs 中的后备文件配置有关,但此错误似乎来自 API 网关,而不是 .NET 应用程序本身。

似乎需要在 API 网关中配置一些东西,但不清楚那可能是什么。 serverless.yml 中包含 Web API 项目的 Lambda 函数已配置:

functions:
    backend-api:
        handler: ABC.API::ABC.API.LambdaEntryPoint::FunctionHandlerAsync
        description: ${self:custom.appConfig.config.stack-description} API for ${opt:stage}
        memorySize: 512
        runtime: dotnet6
        tracing: Active
        timeout: 30
        events:
            - http:
                path: '/{proxy+}'
                method: 'ANY'

解决方案是为 serverless.yml 中的根“/”显式添加一个额外的事件处理程序:

functions:
    backend-api:
        handler: ABC.API::ABC.API.LambdaEntryPoint::FunctionHandlerAsync
        description: ${self:custom.appConfig.config.stack-description} API for ${opt:stage}
        memorySize: 512
        runtime: dotnet6
        tracing: Active
        timeout: 30
        events:
            - http:
                path: '/'
                method: 'ANY'
            - http:
                path: '/{proxy+}'
                method: 'ANY'

我还在Startup.cs中的app.UseStaticFiles();之前添加了app.UseDefaultFiles();