0

当拦截器中没有设置标头时,我的 GET、POST 请求工作正常。如果我在拦截器中使用 setHeaders 来设置我的 userId 数据,我可以在 Network 选项卡中看到两件事:

  1. 没有看到之前可见的响应标头
  2. api 请求中的 CORS 错误和“显示临时标头”标记

在此处输入图像描述

代码(拦截器)

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    // return next.handle(apiRequest);
    
    this.spinnerServcie.requestStarted();

    const user_id = this.loginService.userDetails["user_id"];
    if (!(user_id === undefined || user_id === null || user_id === '')) {
        request = request.clone({
            headers: request.headers.set( 'userId', user_id.toString())
        });
    }

    return next
    .handle(request)
    .pipe(tap((event) => {
        if (event instanceof HttpResponse) {
            this.spinnerServcie.requestEnded();
        }
    },
    (error: HttpErrorResponse) => {
        this.spinnerServcie.resetSpinner();
        throw error;
    }));

它对 GET 工作正常,但对 POST 失败。我也仅将 HTTPClient 用于请求

4

1 回答 1

0

Http 标头不适用于发送数据,例如userId. 您必须将它们添加到params(GET 方法)或body(POST 方法)中才能将它们发送到服务器。见下面的例子:

得到:

this.http.get<MyResponseModel>('https://api.com/my-get-method', {params:{userId: '1'}});

邮政:

this.http.post<MyResponseModel>('https://api.com/my-post-method', {userId: '1'});

或者像这样在拦截器中设置它:

const constantBodyParams: any = {};
constantBodyParams.userId = 1;
req = req.clone({
  body: {...req.body, ...constantBodyParams}
});
于 2021-10-26T11:03:58.747 回答