2016-08-16 3 views
1

Я следовал Angular2 tutorial но Http.delete всегда бросает исключение:
TypeError: this._body является нулевым
Оригинальный код hero.service.tsAngular2 Http.Delete тела равна нулю

public deleteHero(hero: Hero) { 

    const headers = new Headers({ 
     'Content-Type': 'application/json' 
    }); 

    return this._http 
     .delete(this._heroesUrl + "/" + hero.Id, { headers: headers }) 
     .toPromise() 
     .catch(this.handleError); 
} 

ответ

4

На самом деле, в то время как принятый ответ эффективный обходной путь , правильным решением является удаление заголовка Content-Type. DELETE не должны иметь body (пустые или иные), и поэтому они также не должны иметь заголовок Content-Type. То же самое касается GET запросов. Ошибка возникает из-за наличия заголовка Content-Type и не body (что является нелогичной комбинацией).

+0

Ну, я думаю, я никогда не сомневался, почему существует тип контента. Работает как шарм без заголовков. Спасибо –

2

Оказывается, одна маленькая вещь, которую я пропускал было следующее:

.delete(this._heroesUrl + "/" + hero.Id, { headers: headers, body: "" }) 

после заголовков: заголовков вы также можете установить тело. Теперь, поскольку его запрос на удаление обычно не является телом. Но если тело нулевой угловой сгенерирует исключение ...

EDIT
Это обходной путь, но фактический ответ от @simon

+0

Спасибо! Просматривая @ angular/http/bundles/http.umd.js и манипулируя им для нулевой проверки там, ваше решение кажется более приятным! – user3657114

+0

На самом деле правильным решением является удаление заголовка 'Content-Type' - см. Мой ответ ниже. – simon

Смежные вопросы