如何使用 CDK 为 API 网关声明 $default catch-all 路由?
How can I declare the $default catch-all route using CDK for an API Gateway?
在 AWS 控制台中,可以将路由添加到值为 $default
的 API 网关。这将删除为路由输入 HTTP 方法的能力。
AWS 控制台将其描述为:
“您还可以为每个 API 指定一个 $default 路由。当对 API 的请求不匹配其他路由时,将调用 $default 路由。”
我正在尝试使用 AWS CDK v2(在本例中为 C#)重新创建它,但是我没有运气。
我将我的 API 网关与基于存储在 ECR 中的图像的 Lambda 函数集成,不幸的是我无法使用 $default
路由创建我的 API 网关。
httpApi.AddRoutes(new AddRoutesOptions()
{
Path = "$default",
Integration = lambdaProxyIntegration
});
执行上述操作后,HTTP 方法默认为 POST。
也可以像这样指定一个 HTTP 方法:
httpApi.AddRoutes(new AddRoutesOptions()
{
Path = "$default",
Integration = lambdaProxyIntegration,
Methods = new [] {HttpMethod.ANY}
});
但是没有等同于当您在 AWS 控制台中输入 $default
时的选项 & 它使下拉列表变灰为 select 一个 Http 方法。
有什么想法吗?
谢谢
问题解决了。
如此令人困惑,尽管 $default
包罗万象的路线,是一条路线。您实际上并没有使用 AddRoutes()
方法指定它。线索在于它需要一个名为 HttpMethod
.
的枚举
相反,当您在 HttpApi
的 HttpApiProps
对象上设置 DefaultIntegration
属性时,会自动应用 $default
路由。
所以在我的例子中,问题示例中的 httpApi
是 HttpApi
class.
的一个实例
var httpApi = new HttpApi(this, Constants.API_GATEWAY_ID, new HttpApiProps()
{
ApiName = "Your API name",
CreateDefaultStage = true,
DefaultIntegration = lambdaProxyIntegration
});
一旦您指定 DefaultIntegration
,AWS 将按预期设置 $default
路由。
在 AWS 控制台中,可以将路由添加到值为 $default
的 API 网关。这将删除为路由输入 HTTP 方法的能力。
AWS 控制台将其描述为: “您还可以为每个 API 指定一个 $default 路由。当对 API 的请求不匹配其他路由时,将调用 $default 路由。”
我正在尝试使用 AWS CDK v2(在本例中为 C#)重新创建它,但是我没有运气。
我将我的 API 网关与基于存储在 ECR 中的图像的 Lambda 函数集成,不幸的是我无法使用 $default
路由创建我的 API 网关。
httpApi.AddRoutes(new AddRoutesOptions()
{
Path = "$default",
Integration = lambdaProxyIntegration
});
执行上述操作后,HTTP 方法默认为 POST。 也可以像这样指定一个 HTTP 方法:
httpApi.AddRoutes(new AddRoutesOptions()
{
Path = "$default",
Integration = lambdaProxyIntegration,
Methods = new [] {HttpMethod.ANY}
});
但是没有等同于当您在 AWS 控制台中输入 $default
时的选项 & 它使下拉列表变灰为 select 一个 Http 方法。
有什么想法吗?
谢谢
问题解决了。
如此令人困惑,尽管 $default
包罗万象的路线,是一条路线。您实际上并没有使用 AddRoutes()
方法指定它。线索在于它需要一个名为 HttpMethod
.
相反,当您在 HttpApi
的 HttpApiProps
对象上设置 DefaultIntegration
属性时,会自动应用 $default
路由。
所以在我的例子中,问题示例中的 httpApi
是 HttpApi
class.
var httpApi = new HttpApi(this, Constants.API_GATEWAY_ID, new HttpApiProps()
{
ApiName = "Your API name",
CreateDefaultStage = true,
DefaultIntegration = lambdaProxyIntegration
});
一旦您指定 DefaultIntegration
,AWS 将按预期设置 $default
路由。