我正在使用TypeScript语言(前端端)和带有API网关的AWS(后端端)开发使用Angular 4的Web应用程序。
我有一个问题:API网关配置了一个完美的数据更新PUT请求。
如果我在我的应用程序中使用此代码(correctUrl
是一个引用正确URL的字符串)
putObject(myObject: MyObject) {
if (this.authService.getAuthToken()) {
let cognitoToken = this.authService.getAuthToken();
let headers = new Headers({'Content-Type': 'application/json'});
headers.append('Authorization', cognitoToken); //JWT token
let url = correctUrl;
return this.http.put(url, JSON.stringify(myObject) ,
{headers})
.map(data => data.json())
.catch(this.handleError);
} else {
let errMsg = 'Error retrieving Authrization token from Cognito
user session';
console.error('error message: ' + errMsg);
return Observable.throw(errMsg);
}
}
如果我调用此方法(似乎是正确编写的),则不会执行PUT请求(尽管JSON对象完全匹配)并且
它出现在控制台上:Method PUT is not allowed by Access-Control-Allow-Methods in preflight response.
这很奇怪,因为如果我去“启用CORS”,所有三种方法都有复选框:PUT,GET,OPTIONS(因为PUT有复选标记,我不明白这是什么错误。
我以同样的方式调用GET请求,一切都很完美,我不解释因为它与PUT不一样!