HttpInterceptor不适用于所有请求

时间:2019-08-02 10:51:36

标签: javascript angular typescript http

我正在使用新版本的angular,并且面临着在所有请求中都没有在请求标头中发送授权令牌的问题。 自从我升级到新版本8后,我检查了所有内容,仍然遇到了同样的问题。 当我发送一些请求时,即使我在控制台中打印了授权标头以检查其是否存在,我也找不到授权标头。

这是Angular 8的新版本。

@NgModule({
  declarations: [
    AppComponent,
    NavbarComponent,
    FooterComponent,
    HomeComponent,
    ContactUsComponent,
    NotFoundComponent,
    CartComponent,
    LoginComponent
  ],
  imports: [BrowserModule, AppRoutingModule, CustomModule, LayoutModule],
  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: RequestInterceptor,
      multi: true
    }
  ],
  bootstrap: [AppComponent]
})
export class AppModule {}

app.module.ts

{{1}}

我希望有授权标头。

1 个答案:

答案 0 :(得分:1)

导入HTTP_INTERCEPTORS和您的服务,并在提供商中提供

<! app.module.ts -->
import { HTTP_INTERCEPTORS } from '@angular/common/http';
import { RequestInterceptor } from './your-interceptor-path'

@NgModule({
  declarations: [...],
  imports: [...],
  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: RequestInterceptor,
      multi: true
    }
  ]
  

您仅将Authorization标头克隆到HttpRequest

RequestInterceptor标头克隆旁边的Authorization服务中添加以下行

if (!req.headers.has('Content-Type')) {
            req = req.clone({ headers: req.headers.set('Content-Type', 'application/json') });
        }

req = req.clone({ headers: req.headers.set('Accept', 'application/json') });