4

我已将应用程序从 Angular 4.2 升级到 5,但在更改HttpHttpClientPOST 请求时出错:

错误服务器响应状态为 415(不支持的媒体类型)

app.module我已经导入HttpClientModule

import { HttpClientModule } from '@angular/common/http';

旧代码:

 post(url: string, model: any): Observable<any> {
        let body = JSON.stringify(model);
        let headers = new Headers({ 'Content-Type': 'application/json' });
        let options = new RequestOptions({ headers: headers });
        return this._http.post(url, body, options)
            .map((response: Response) => <any>response.json())
            .catch(this.handleError);
    }

新代码:

put(url: string, id: number, model: any): Observable<any> {
        let body = JSON.stringify(model);
        let headers = new Headers({ 'Content-Type': 'application/json' });
        let options: any = new RequestOptions({ headers: headers });
        return this._http.put(url + id, body, options)
            .catch(this.handleError);        //only removed .map
    }

谢谢

4

2 回答 2

6

对我来说,当使用对象作为主体而不是对其进行字符串化时,它无需设置 Content-Type 标头即可工作。我猜想使用字符串作为正文会使 Angular 假定“文本/纯文本”作为内容类型,而不是默认的“应用程序/json”。

因此,只需使用以下代码,而不是您的新代码:

return this._http.put(url + id, model).subscribe(..

于 2018-01-16T15:47:08.943 回答
2

它通过在发送到服务之前检查从输入类型接收到的数据类型对我有用。就我而言,我从带有字符串的下拉列表中获得了“Id”。所以,我曾经parseInt将数据类型更改为数字,然后它就起作用了。

于 2020-05-14T06:51:43.697 回答