从Postman命中API时,出现此错误。
https://account-perf.myglobal.com/v1/users/00uk0khprrME7gZOU0h7/credentials/change_password
Content-Type:application / json
授权:承担者n7mbkw74jsubd7rauhptdnre
开机自检
{“密码”:“ Baddy125 @”,“令牌”:“ eyJhbGci ....”}
Web服务调用以生成令牌-
https://api-perf.myglobal.com/rest/oauth2/v1/token
开机自检
client_id:abcd
client_secret:xyz
grant_type:client_credentials
答案 0 :(得分:3)
每当调用任何未处理的端点方法或资源时,我都会遇到此问题。我的设置是一个API网关,该网关具有已定义的资源(例如/myendpoint
)和用于这些端点的已定义方法(例如GET
)。
要修复此问题,我创建了一个Node.js Lambda函数,该函数只返回了404。然后在端点ANY
的根目录添加了任何/
方法,并将其指向Lambda代理函数。到任何方法。
然后我添加了代理资源,例如/{proxy}
-创建资源以告诉代理时,您可以单击一个复选框。在该资源上有一个指向相同Lambda函数的ANY
方法,部署了API,就可以了。
现在,我得到了一个正确的HTTP 404
错误,而不是auth承载令牌错误。
答案 1 :(得分:1)
分析并验证请求路径,如果请求不正确,则会在API Gateway上引发此错误。在纠正了请求参数后,它又很好地解决了我的错误。
让我知道。
答案 2 :(得分:0)
@Matt H - 这是个好主意,它给了我另一个灵感。
假设 API 中的所有其他路径都已明确指定,我创建了一个默认路径 /{proxy+},它将返回 http 404,未找到消息资源。我没有使用 lambda,而是创建了一个模拟响应,因此让 Lambda 返回响应甚至不会产生任何成本。
我通过 Open API 规范创建了我的 API。这就是我的 YAML 实现方式
/{proxy+}:
x-amazon-apigateway-any-method:
responses:
404:
description: "404 response"
content: {}
x-amazon-apigateway-integration:
responses:
404:
statusCode: "404"
responseTemplates:
application/json: "{\"message\":\"resource not available\"}"
requestTemplates:
application/json: "{\"statusCode\": 404}"
passthroughBehavior: "when_no_templates"
type: "mock"
Serverless 还能够指定内联模拟响应。下面可以是一个示例:
functions:
default:
handler: handler.default
events:
- http:
path: hello
cors: true
method: get
integration: mock
request:
template:
application/json: '{"statusCode": 404}'
response:
template: $input.path('$')
statusCodes:
404:
pattern: '' #default method
template:
application/json: '{"statusCode": 404, "message":"resource not found"}'
无服务器文档:https://www.serverless.com/framework/docs/providers/aws/events/apigateway/#custom-response-templates