Angular2 HTTP добавляет заголовок авторизации

Я пытаюсь использовать http в Angular. Мой код выглядит так:

const url ='this is my url';
const headers = new Headers({'Authorization': 'this is my token'});
return this.http.put(url, {headers: headers}).toPromise().then......

Но я продолжаю получать 401 Unauthorized в качестве кода состояния запроса. Я попытался скопировать свой запрос с вкладки Chrome Network в Postman и заметил, что заголовок авторизации был добавлен в тело запроса, а не в заголовки.

введите здесь описание изображения

Это нормально?

Если я вручную добавлю в Postman заголовок авторизации в качестве заголовка, запрос будет работать так, как ожидалось.


person Zied Koubaa    schedule 08.03.2018    source источник


Ответы (3)


Согласно документам https://angular.io/api/http/Http.

Сигнатура метода Http.put:

put(url: string, body: any, options?: RequestOptionsArgs): Observable<Response>

Итак, вашим вторым параметром должны быть данные/тело, а не параметры.

Пытаться:

return this.http.put(url, {}, {headers: headers}).toPromise().then......
person Héctor    schedule 08.03.2018
comment
Это для AngularJS, который совершенно отличается от Angular +2;) - person axl-code; 08.03.2018
comment
Спасибо ! Работает сейчас. - person Zied Koubaa; 08.03.2018
comment
@ZiedKoubaa рада помочь вам - person Héctor; 08.03.2018

Когда вы выполняете запрос PUT, вам нужно предоставить тело, потому что прямо сейчас вы передаете headers в качестве тела вашего запроса. Итак, ваш запрос будет примерно таким

this.http.put(url, body, headers)

person filipbarak    schedule 08.03.2018
comment
Спасибо ! Работает сейчас. - person Zied Koubaa; 08.03.2018

https://angular.io/guide/http#adding-headers

Когда я использую httpclient в среде angular2+, я обычно использую так:

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

const httpOptions = {
  headers: new HttpHeaders({
    'Content-Type':  'application/json',
    'Authorization': 'my-auth-token'
  })
};

Вы проверили Content-Type в заголовках?

если вы хотите добавить установленный заголовок аутентификации на сервисном уровне, при вызове httpClient вы можете использовать перехватчик Http ( https://alligator.io/angular/httpclient-interceptors/)

person Jihoon Kwon    schedule 08.03.2018