Angular: установить Content-Type для каждого запроса

Мне нужно выполнить один запрос с Content-Type, отличным от application/json. Изменение параметров $http по умолчанию не является вариантом, поскольку многие запросы по-прежнему выполняются с данными JSON.

я нашел пример

var req = {
            method: 'POST',
            url: 'example.com',
            headers: {
                'Content-Type': "application/x-www-form-urlencoded"
            },
            data:  "somedata"
            }

 $http(req).then(function (resp) { console.log(resp);});

Но работать не хочет — Content-Type по-прежнему application/json.

Есть ли верный способ сделать это правильно? Изменение $http значений по умолчанию и последующее восстановление не является решением.


person Arman Hayots    schedule 15.12.2015    source источник


Ответы (1)


То, что вы делаете, не является допустимым способом установки заголовков в angularjs.

Чтобы добавить или перезаписать эти значения по умолчанию, просто добавьте или удалите свойство из этих объектов конфигурации. Чтобы добавить заголовки для метода HTTP, отличного от POST или PUT, просто добавьте новый объект с именем метода HTTP в нижнем регистре в качестве ключа, например. $httpProvider.defaults.headers.get = { 'Мой-заголовок' : 'значение' }.

Ссылка https://docs.angularjs.org/api/ng/service/$http - Раздел "Настройка заголовков HTTP"

Редактировать.

То, что вы делаете, правильно, но вы упускаете одну вещь.

В вашем сценарии это не работает, потому что при использовании application/x-www-form-urlencoded вам нужно кодировать свои данные с помощью $httpParamSerializerJQLike(). Также не забудьте поставить $httpParamSerializerJQLike в качестве зависимости.

person Chris Hermut    schedule 15.12.2015
comment
Но мне нужно установить его только для одного звонка, а не для всех. - person Arman Hayots; 15.12.2015
comment
Извините, запутался, когда писал этот ответ. См. редактирование. - person Chris Hermut; 15.12.2015
comment
Можете ли вы помочь с этим вопросом? stackoverflow.com/questions/34314372/ - person Arman Hayots; 17.12.2015