работал отлично, спасибо

я есть основной модуль с HttpInterceptor для обработки авторизации, и я включаю этот модуль в AppModule, таким образом, все другие модули, использующие HttpClient, используют этот перехватчик.

@NgModule({
  imports: [],
  declarations: [],
  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: AuthInterceptor,
      multi: true,
    },
  ]
})
export class CoreModule { }

Как заставить модуль обходить перехватчик по умолчанию?

@NgModule({
  imports: [
    CommonModule
  ],
  declarations: components,
  providers: [CustomService],
  exports: components,
})
export class ModuleWithoutInterceptorModule { }
 hayhorse30 сент. 2017 г., 23:26
Я не мог понять это либо. Я думаю, что правильным способом будет создание промежуточных «перехваченных» и «неперехваченных» модулей между приложением и функциональными модулями и предоставление перехватчика в «неперехваченном» модуле вместо «основного» модуля. Если у кого-то есть какие-либо другие предложения или они согласны с таким подходом, пожалуйста, присоединяйтесь.

Ответы на вопрос(2)

вэто предложение на GitHub мы реализовали простой заголовок для определения запросов, которые не должны быть перехвачены. В перехватчике:

export const InterceptorSkipHeader = 'X-Skip-Interceptor';

@Injectable()
export class SkippableInterceptor implements HttpInterceptor {

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    if (req.headers.has(InterceptorSkipHeader)) {
      const headers = req.headers.delete(InterceptorSkipHeader);
      return next.handle(req.clone({ headers }));
    }

    ...  // intercept
  }

}

Затем всякий раз, когда вы хотите пропустить перехват для определенного запроса:

const headers = new HttpHeaders().set(InterceptorSkipHeader, '');

this.httpClient
    .get<ResponseType>(someUrl, { headers })
    ...

Обратите внимание, что с этим методомоказание услугне перехватчик выбирает, когда применяется логика перехватчика; это означает, что службы должны «знать» что-то о перехватчиках в вашем приложении. В зависимости от вашего варианта использования, может быть лучше сделатьперехватчики решить, когда применять логику.

 Alexandru Olaru01 мар. 2018 г., 14:16
Хорошая идея, поэтому, используя заголовки, мы можем создавать перехватчики различного типа!
 Louis07 мар. 2018 г., 16:48
работал отлично, спасибо
 jonrsharpe01 мар. 2018 г., 14:36
@AlexandruOlaru да, я полагаю, у вас может быть пара, которую вы включаете и выключаете по мере необходимости. Это может быть довольно сложным, хотя, и вы должны быть осторожны, чтобы принять правильное решение о том,оказание услуг илиистребитель-перехватчик следует выбирать, когда применять преобразование. У нас есть только один перехватчик для аутентификации, и мы отключаем его от одной службы, которая должна получить начальный токен.
Решение Вопроса

Пример:

import { HttpClient, ..., HttpBackend } from '@angular/common/http';

@Injectable()
export class TestService {

  private httpClient: HttpClient;

  constructor( handler: HttpBackend) { 
     this.httpClient = new HttpClient(handler);
  }
....

Таким образом, служба не перехватывается AuthInterceptor.

 seangwright30 авг. 2018 г., 19:35
@rodney Это решение было высоко оценено на github без возражений со стороны основной команды.github.com/angular/angular/issues/20203#issuecomment-368680437
 Rodney22 мая 2018 г., 01:12
Из документации это выглядит как хорошее решение - насколько оно ориентировано на будущее?
 Brad28 авг. 2018 г., 19:19
Использовал APP_INITIALIZER для получения моих настроек приложения через экспресс-конечную точку, но мой adal inteceptor еще не был инициализирован, поэтому он выдавал ошибку. Это исправило мои проблемы после поиска около часа. Можно легко увидеть создание поста в блоге по этому вопросу.
 Nandun26 июл. 2018 г., 06:47
@deg ты мой герой прямо сейчас! Я использовал токены APP_INITIALIZER и HTTP_INTERCEPTOR в своем коде. мой перехватчик использовал значение, которое было инициализировано в инициализаторе приложения. И мой инициализатор приложения делал http.get, который в свою очередь поражал перехватчик. ты не представляешь, как я счастлив, что наткнулся на этот ответ! ...
 whatsTheDiff24 сент. 2018 г., 18:39
Использование HttpBackend обходит все перехватчики, верно? Можно ли исключить некоторые перехватчики, но не другие?

Ваш ответ на вопрос