angular2-rc4-text/plain автоматически добавляется в тип контента, когда задан x-www-form-urlencoded

Я использую angular2-rc4 с пружинным упором. Я использую Spring-аутентификацию.
Spring-аутентификация ожидает, что Content-Type будет application/x-www-form-urlencoded; charset=UTF-8 и размещать данные в формате простой строки, например "j_username=user&j_password=pass".
Поэтому я написал следующий код:

let data = 'j_username=user&j_password=password'; //Spring authentication expects data in this format.
let headers = new Headers({'Content-type': 'application/x-www-form-urlencoded; charset=UTF-8'});
let options = new RequestOptions({headers: headers});
 this.http.post(url, data, options).subscribe(
.....
....
);

Когда я запускаю этот код через firefox, он проходит без проблем. Данные поступают на сервер, и аутентификация работает нормально.
Но когда я делаю это из Chrome, это не работает. Имя пользователя и пароль достигают сервера с пустыми значениями.
Я сравнил заголовок запроса Chrome и Firefox с помощью firebug. Я заметил одно отличие. Content-Type работает правильно в Firefox, но не в Chrome. Ниже приведен тип содержимого Chrome и Firefox:
Firefox: Content-type: application/x-www-form-urlencoded; charset=UTF-8
Chrome : Тип содержимого: test/plain, application/x-www-form-urlencoded; кодировка = UTF-8

Если вы видите, что Chrome автоматически добавляет text/plain к своему заголовку. Я не понимаю причину этого.
Примечание. Этот код работал с angular2-rc1. Проблема возникла после обновления до rc4.
Пожалуйста, помогите
Спасибо.


person Krishna    schedule 15.07.2016    source источник
comment
По этому поводу есть проблема на Github Angular2. Issue #9452, так что похоже, что в RC5+ это будет исправлено.   -  person Post Impatica    schedule 08.08.2016


Ответы (1)


Я боролся с этой проблемой с 2 ​​дней, и сразу после публикации этого вопроса я получил решение в коде angular2-rc4. Я публикую решение здесь, чтобы оно могло помочь другим.
Я изменил свой код, как показано ниже, и он заработал: From: let headers = new Headers({'Content-type': 'application/x-www-form-urlencoded; charset=UTF-8'}); Кому: let headers = new Headers(); headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');

Но я до сих пор не уверен, как предыдущий код работал в Firefox.

person Krishna    schedule 15.07.2016