我已经使用位于http://editor.swagger.io的Swagger编辑器生成了一个Angular2打字稿客户端 . 虽然POST endpoints 永远不会被发送到服务器,但API适用于所有非 POST
类型的api endpoints .
到达生成的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和命令行中的 endpoints $ 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'
虽然,当我尝试使用生成的打字稿到达此 endpoints 时,没有任何内容发布到服务器并且不会抛出任何错误 .
2 回答
出于某种原因,http observable在实际发布之前收集了垃圾(从我所看到的) .
我组件中的破碎情况:
我组件中的固定情况:
随意评论一下到底发生了什么 . 邮寄到我的服务器现在有效 . 观察改变行为......
我也有这个问题,我无意中忘了订阅我的api电话 . 我从Rx documentation发现:
在这种情况下,HttpClient返回一个observable,它允许我们向序列添加更多动作,因此是一个'冷'可观察,只有在订阅时才会触发 .