Ошибка: запрос не выполнен с кодом состояния 403 (GET)

#aws-lambda #aws-api-gateway #aws-amplify

#aws-lambda #aws-api-gateway #aws-amplify

Вопрос:

Я столкнулся с ошибкой, когда попытался вызвать свою конечную точку GET /dev/get-comments из своего API. Теперь мой API работает, поскольку моя другая конечная точка GET /dev/get-posts работает нормально, единственное различие между ними заключается в том, что первая конечная точка использует тело запроса.

 API.get("holler-api", "/get-comments", {
  body: {postId: this.props.post.postId}
}).then(result => {
  if(result.Count > 0) {
    this.setState({
      comments: result.Items
    });
  }
})
.catch(err => console.log(err));
  
 XHR GET https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/get-comments
[HTTP/2 403 Forbidden 23ms]
  

Это был ответ на запрос, который объяснял ошибку, не очень полезный!

 SyntaxError: JSON.parse: bad control character in string literal at line 1 column 191 of the JSON data
{"message":"The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.
The Canonical String for this request should have been
'GET
/dev/get-comments
  

Ответ №1:

Проще говоря, API gateway не поддерживает тела запросов для запросов GET, поэтому вам необходимо использовать параметры path. введите описание изображения здесь

Решение состояло в том, чтобы преобразовать все мои функции GET lambda для использования параметров пути и вызвать API как таковой:

 API.get("holler-api", `/get-comments/${this.props.post.postId}`)
.then(result => {
  if(result.Count > 0) {
    console.log(result.Items);
    this.setState({
      comments: result.Items
    });
  }
})
.catch(err => console.log(err));