Неправильный запрос HttpInterceptor htting 400 при добавлении заголовка авторизации - PullRequest
0 голосов
/ 30 ноября 2018

Я продолжаю сталкиваться с ошибкой HTTP - 400 (неправильный запрос) при попытке добавить заголовок авторизации с HTTPInterceptor

Я тестировал с почтальоном, и он работает Tested with Postman

Вот код:

Перехватчик

import {Injectable} from '@angular/core';
import {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';
import {Observable} from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class InterceptrorService implements HttpInterceptor {

  constructor() {
  }

  intercept(req: HttpRequest<any>, next: HttpHandler):Observable<HttpEvent<any>> {
    req = req.clone({
      setHeaders: {
    'x-api-key': 'a404823a-55b8-419e-bcbf-8ebb9ff7bae3',
    }
  });
  return next.handle(req);
 }

}

TestService

import {Injectable} from '@angular/core';
import {HttpClient} from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})
export class TestService {

  constructor(private http: HttpClient) {
  }

  test() {
    return this.http.get('http://motorway:8000/wluntest/test');
  }
}

app.module

providers: [
{
  provide: HTTP_INTERCEPTORS,
  useClass: InterceptrorService,
  multi: true
}

],

app.component

constructor(private test: TestService) {
  this.test.test().subscribe(value => console.log(value));
}

400 - bad request

API представляет собой макет API, построенный с Gravitee

Угловой вариант

Angular CLI: 6.2.4
Node: 10.13.0
OS: linux x64
Angular: 6.1.9
... animations, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router

Http Interceptor log

Пожалуйста, помогите, спасибо

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

Ваша проблема в том, что тело ответа не является объектом JSON, так как http-клиент оборачивает все в Object (по умолчанию).Итак, что вы можете сделать:

  • Измените тело ответа на возвращаемое { msg: 'hello' } и в обратном вызове поднимите его на console.log(value.msg)
  • Или обработайте тот факт, что это простообычный текст, добавив {responseType: 'text'}, в вашем примере:

    test() {
      return this.http.get('http://motorway:8000/wluntest/test', {responseType: 'text'});
    }
    
0 голосов
/ 06 декабря 2018

Это произошло из-за CROS в бэкэнде (Gravitee) Access-Control-Allow-Headers, необходимого для настройки пользовательских заголовков.

Подробнее о: https://docs.gravitee.io/apim_publisherguide_configuring_cors.html

0 голосов
/ 30 ноября 2018

попробуйте добавить заголовки, как это.

req = req.clone({headers:req.headers.set('x-api-key','a404823a-55b8-419e-bcbf-8ebb9ff7bae3')});
...