Обновите Http до HttpClient в Angular 5: сервер ответил со статусом 415 (неподдерживаемый тип носителя)

Я обновил приложение с Angular 4.2 до 5, но после изменения Http на HttpClient получил ошибку в запросе POST:

ошибка, сервер ответил со статусом 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
    }

спасибо


person mrapi    schedule 14.11.2017    source источник
comment
Вам необходимо переработать параметры и объекты заголовков, пожалуйста, проверьте https://angular.io/guide/http#making-a-post-request   -  person Jota.Toledo    schedule 14.11.2017
comment
hi.indeed, кажется, работает return this._http.post(url, body, {headers: new HttpHeaders().set('Content-Type', 'application/json') } )   -  person mrapi    schedule 14.11.2017
comment
прочитайте документы, внимательно и полностью   -  person Jota.Toledo    schedule 14.11.2017


Ответы (2)


Для меня это работало без установки заголовка Content-Type при использовании объекта в качестве тела вместо его строковой обработки. Я предполагаю, что использование строки в качестве тела заставляет Angular принимать «текст/обычный» в качестве типа контента вместо стандартного «приложения/json».

Поэтому вместо вашего нового кода просто используйте:

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

person gjz    schedule 16.01.2018
comment
большое спасибо за подсказку. Вы настоящий спаситель. :) - person abhinav3414; 25.03.2018