Angular 2 Http Post Promise 失败,未发送数据

Angular 2 Http Post with Promise failing, not sending data

我正在尝试用 angular 进行 http.post 调用 2. 我已经在 postman 中测试了调用,所以我知道 api 正在工作。我得到一个错误,输入为空,这意味着它没有获取数据。我已经阅读了一些答案和文章,但无法使用数据成功调用

任何人都可以让我了解我所缺少的东西吗?

public upload(name: string, data: any, result, contentType: string) : Promise<Response> {

        let headers = new Headers({ 'Content-Type': contentType });

        let options = new RequestOptions({ headers: headers });

        return this.http
            .post(this.urlAPI, data, options)
            .toPromise()
            .then(this.extractData)
            .catch(this.handleError);
    }

    extractData(res:Response) {
        console.log('res: ', res);
        let body = res.json();
        return Promise.resolve(res);
    }


    handleError(err: any): Promise<any> {
        console.error('An Error has occured: ', err);
        return Promise.reject(err);
    }

我不确定你的 'data' 是什么类型。数据必须在发送前进行字符串化。以下是对我来说可行的版本。

saveNote(note: ApprovalNoteModel): Observable<ApprovalNoteModel> {
    let body = JSON.stringify(note);
    let headers = this.utilsSvc.getAuthHeaders();
    headers.set('Content-Type', 'application/json');

    return this.http.post('cloud/api/approval/note', body,
        { headers: headers }
    ).map(response => response.json());
}

如果它是一个文件,那么您不能通过 'http' 执行此操作,我相信。这是我的可行版本。

addFileRequest(referenceId: number, licenseId: number, url: string, files: File[]): Observable<any> {
    return Observable.create(observer => {
        this.progressObserver = observer;
        let formData: FormData = new FormData(),
            xhr: XMLHttpRequest = new XMLHttpRequest();

        formData.append('referenceId', referenceId);
        formData.append('licenseId', licenseId);
        for (let i = 0; i < files.length; i++) {
            formData.append("uploads[]", files[i], files[i].name);
        }

        xhr.onreadystatechange = () => {
            if (xhr.readyState === 4) {
                if (xhr.status === 200) {
                    observer.next(xhr.response);
                    observer.complete();
                } else {
                    if (xhr.response.status)
                        observer.error(xhr.response);
                    else
                        observer.error({ 'status': xhr.status, '_body': xhr.response });
                }
            }
        };

        xhr.upload.onprogress = (event) => {
            this.progress = Math.round(event.loaded / event.total * 100);
            this.progressObserver.next(this.progress);
        };

        xhr.open('POST', url, true);
        xhr.setRequestHeader('Authorization', this.utilsSvc.getToken());
        xhr.send(formData);
    });
}