我使用位于http://editor.swagger.io的Swagger编辑器生成了一个Angular2打字稿客户端。虽然POST端点永远不会被发送到服务器,但API适用于所有类型为POST
的api端点。
到达生成的typescript中的以下方法,console.log
语句显示正在设置标头,但实际上没有POST到服务器。
这表明this.http.request
电话有问题。
public snapshotsFoo (data: Array<number>, extraHttpRequestParams?: any ) : Observable<models.Snapshot> {
const path = this.basePath + '/Snapshots/foo';
let queryParameters = new URLSearchParams();
let headerParams = this.defaultHeaders;
headerParams.set("Content-Type", "application/json");
// verify required parameter 'data' is not null or undefined
if (data === null || data === undefined) {
throw new Error('Required parameter data was null or undefined when calling snapshotsFoo.');
}
let requestOptions: RequestOptionsArgs = {
method: 'POST',
headers: headerParams,
search: queryParameters
};
requestOptions.body = JSON.stringify(data);
console.log('I am in foo', path, requestOptions);
return this.http.request(path, requestOptions)
.map((response: Response) => {
if (response.status === 204) {
return undefined;
} else {
return response.json();
}
});
}
我可以成功地使用来自swagger ui(http://0.0.0.0:5000/api/ui),POSTman和$ curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '[7,7,8]' 'http://0.0.0.0:5000/api/Snapshots/foo'
虽然,当我尝试使用生成的打字稿到达此端点时,没有任何内容发布到服务器并且不会抛出任何错误。
答案 0 :(得分:0)
出于某种原因,http observable在实际发布之前收集了垃圾(从我可以看到)。
我的组件中的破碎情况:
...
this.snapshotApi.snapshotsFoo([6,7,8]);
...
我的组件中的固定情况:
...
let whocares = this.snapshotApi.snapshotsFoo([6,7,8]);
whocares.subscribe(res => {
console.log('i dont even');
}
随意评论一下到底发生了什么。邮寄到我的服务器现在有效。观察改变行为......
答案 1 :(得分:0)
我也有这个问题,我无意中忘了订阅我的api电话。我从Rx documentation发现:
如果Observable在观察者订阅之前没有开始发射物品,则称其为“冷”Observable;如果Observable可以在任何时间开始发出物品,则它被称为“热”Observable,并且订户可以在其开始之后的某个时刻开始观察所发射物品的序列,从而错过了在订阅之前发射的任何物品。
在这种情况下,HttpClient返回一个observable,它允许我们在序列中添加更多动作,因此是一个“冷”。可观察的,只有在订阅时才会被触发。