我正在尝试在部署脚本中使用 aws-cli 从命令行设置 aws CORS。我已经使用以下perl到shell命令创建了POST资源。我正在尝试将集成响应设置为"*",就像启用内核一样。
aws apigateway put-method-response \
--region "$region" \
--rest-api-id "$api_id" \
--resource-id "$resource_id" \
--http-method "POST" \
--status-code 200 \
--response-models '{"application/json":"Empty"}' \
--response-parameters '{"method.response.header.Access-Control-Allow-Origin":true}'
当我运行以下命令来设置集成值时。
aws apigateway put-integration-response \
--region "$region" \
--rest-api-id "$api_id" \
--resource-id "$resource_id" \
--http-method "$method" \
--status-code 200 \
--response-template '{"application/json":"Empty"}' \
--response-parameters \
'{"method.response.header.Access-Control-Allow-Origin": "'*'"}'
我收到以下错误。
调用 PutIntegrationResponse 操作时发生客户端错误 (BadRequestException):指定的映射表达式无效:验证结果:警告:[],错误:[指定的映射表达式无效:*]
谁能告诉我这个错误真正指的是什么,甚至是处理 api 网关部署脚本的更好方法。
这个问题最终确实是逃避字符的正确方法。
--response-parameters '{"method.response.header.Access-Control-Allow-Origin":"'"'*'"'"}'
显然,这更多的是关于了解格式化 JSON 的正确方法。
API 网关管理控制台有一个很好的"启用 CORS"功能,您可能已经看到过。至于使用 CLI 进行复制,我建议使用控制台功能,事后观察配置,并在 CLI 请求中使用相同的参数。
您看到的错误一定是由值"*"的单引号转义不正确引起的,因为只有字符 * 无效。另外,为了指出另一个潜在的问题,--response-templates '{"application/json":"Empty"}' 的输入是有效的,但解释与方法-响应对象中的 --response-models 不同。该值会将使用该集成响应的所有 API 调用的响应正文设置为"空"。要执行直通,只是不要设置 --response-templates 的值