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();
。
我们已经将 .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();
。